![]() |
Чекбокс в меню
Приветствую. Интересует создание чекбокса в меню. Само меню грузится из ресурса. Вообщем если что, то сразу тут показал "наброски" ресурсов и кода. Подскажите как правильно подправить код (или ресурс меню), чтобы при нажатии в меню появлялся/исчезал чекбокс. Заранее спасибо.
Меню 101 MENU LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL { POPUP "Действие" { MENUITEM "Поверх окон", 1001 } } Диалог 101 DIALOGEX 0, 0, 70, 20 STYLE DS_MODALFRAME | DS_CENTER | WS_CAPTION | WS_SYSMENU CAPTION "Поверх окон" MENU 101 LANGUAGE LANG_RUSSIAN, 0x1 FONT 8, "MS SHELL DLG" { } Код program example; {$R example.res} uses Windows, Messages; const MAIN_DIALOG = 101; MAIN_MENU = 101; MENU_ON_TOP = 1001; APP_NAME = 'Поверх окон'; var Inst, HWND : integer; function MainDlgProc(hWin, uMsg, wParam, lParam : Integer) : Integer; stdcall; begin Result := 0; HWND := FindWindow(nil, APP_NAME); case uMsg of WM_COMMAND : begin if wParam = WM_COMMAND then EndDialog(hWin,0); if MF_UNCHECKED = GetMenuState(MAIN_MENU, MENU_ON_TOP, MF_BYCOMMAND) then begin CheckMenuItem(MENU_ON_TOP, MF_CHECKED,MF_BYCOMMAND); Setwindowpos(hWnd, hWnd_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW); end else begin CheckMenuItem(MENU_ON_TOP, MF_UNCHECKED,MF_BYCOMMAND); Setwindowpos(hWnd, hWnd_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW); end; end; WM_DESTROY : begin EndDialog(hWin,0); end; WM_CLOSE : begin EndDialog(hWin,0); end; end; end; begin Inst := hInstance; DialogBoxParam(Inst, PChar(MAIN_DIALOG), 0, @MainDlgProc, 0); end. |
Maksim V
Исходник давать нет смысла, т.к. я писал на ассемблере, но заметки дам. При объявлении ресурса меню необходимо выставить свойство CHECKED следующим образом: Код:
101 MENU Ты её(функцию) кстати походу неправильно вызываешь, должно быть: Код:
var Используй теги кода в сообщениях. На этом форуме практикуется нажатие на кнопочку "полезное сообщение" под конкретным сообщением,которое тебе помогло. |
Вложений: 1
Благодарю. Я уже и забыл что здесь сообщение оставлял. Присоединяю архив с исходником по этой теме, когда дошло как это делать. Чтобы может быть меньше вопросов задавали как я :) .
Ммм... Добавлю: А что надо в коде изменить, чтобы вместо чекбоксов были точки такие большие (Ну как в Диспетчере задач при выборе приоритета)? |
Цитата:
Техника следующая: Код:
#define IDM_RB_1 101 Код:
var Наконец,при обработке сообщения WM_COMMAND в той же диалоговой процедуре необходимо снова вызывать функцию CheckMenuRadioItem, изменяя каждый раз только третий параметр в зависимости от того, какой член меню (радиокнопку) нажал пользователь. |
Спасибо. :)
|
Время: 05:56. |
Время: 05:56.
© OSzone.net 2001-