Операционная система Microsoft Windows 3.1 для программиста -том 3


Системное меню - часть 2


В качестве идентификатора мы использовали значение 0x8880 (младшие четыре бита равны нулю):

#define CM_SYSABOUT 0x8880

Для блокирования строки "Close" мы вызываем функцию EnableMenuItem, указывая ей в качестве первого параметра идентификатор системного меню:

EnableMenuItem(hmenuSystemMenu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);

Обработчик сообщения WM_SYSCOMMAND, определенный в функции главного окна приложения SMARTPAD, проверяет значение параметра wParam на совпадение с идентификатором добавленной нами строки без учета младших четырех бит:

case WM_SYSCOMMAND: { if((wParam & 0xfff0) == CM_SYSABOUT) { lpfnDlgProc = (DLGPROC)MakeProcInstance((FARPROC)DlgProc, hInst); DialogBox(hInst, "ABOUT", hwnd, lpfnDlgProc); return 0; } else if((wParam & 0xfff0) == SC_CLOSE) return 0; break; }

Для того чтобы заблокировать строку "Close", мы выполняем обработку сообщения WM_SYSCOMMAND с параметром wParam, равным SC_CLOSE (идентификатор стандартной строки "Close" в системном меню). Обработка заключается в возврате нулевого значения.

Так как ранее мы уже заблокировали эту строку при помощи функции EnableMenuItem, нет необходимости выполнять еще одну блокировку в обработчике сообщения WM_SYSCOMMAND. Мы сделали это исключительно для иллюстрации возможности блокировки строки системного меню при обработке сообщения WM_SYSCOMMAND.




Начало  Назад  Вперед