|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API - Чекбокс в меню |
|
Win32 API - Чекбокс в меню
|
Новый участник Сообщения: 20 |
Приветствую. Интересует создание чекбокса в меню. Само меню грузится из ресурса. Вообщем если что, то сразу тут показал "наброски" ресурсов и кода. Подскажите как правильно подправить код (или ресурс меню), чтобы при нажатии в меню появлялся/исчезал чекбокс. Заранее спасибо.
Меню 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. |
|
Отправлено: 21:53, 14-07-2007 |
![]() Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Maksim V
Исходник давать нет смысла, т.к. я писал на ассемблере, но заметки дам. При объявлении ресурса меню необходимо выставить свойство CHECKED следующим образом: 101 MENU LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL { POPUP "Действие" { MENUITEM "Поверх окон", 1001, CHECKED } } Ты её(функцию) кстати походу неправильно вызываешь, должно быть: var g_hMenu : HANDLE function MainDlgProc(hWin, uMsg, wParam, lParam : Integer) : Integer; stdcall; begin ... g_hMenu := GetMenu(hWin); CheckMenuItem(g_hMenu, MENU_ON_TOP, MF_UNCHECKED); ... Используй теги кода в сообщениях. На этом форуме практикуется нажатие на кнопочку "полезное сообщение" под конкретным сообщением,которое тебе помогло. |
------- Отправлено: 14:50, 15-07-2007 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 20
|
Профиль | Отправить PM | Цитировать Благодарю. Я уже и забыл что здесь сообщение оставлял. Присоединяю архив с исходником по этой теме, когда дошло как это делать. Чтобы может быть меньше вопросов задавали как я
![]() Ммм... Добавлю: А что надо в коде изменить, чтобы вместо чекбоксов были точки такие большие (Ну как в Диспетчере задач при выборе приоритета)? |
Отправлено: 15:43, 17-07-2007 | #3 |
![]() Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Цитата Maksim V:
Техника следующая: #define IDM_RB_1 101 #define IDM_RB_2 102 #define IDM_RB_3 103 ... POPUP "Radio Buttons" BEGIN MENUITEM "Radio button nr.1", IDM_RB_1, CHECKED MENUITEM "Radio button nr.2", IDM_RB_2, CHECKED MENUITEM "Radio button nr.3", IDM_RB_3, CHECKED END ... var g_hMenu : HANDLE function MainDlgProc(hWin, uMsg, wParam, lParam : Integer) : Integer; stdcall; begin ... g_hMenu := GetMenu(hWin); CheckMenuRadioItem(g_hMenu, // описатель меню IDM_RB_1, // первый в группе членов меню IDM_RB_3, // последний в группе IDM_RB_1, // член,который надо отметить MF_BYCOMMAND); Наконец,при обработке сообщения WM_COMMAND в той же диалоговой процедуре необходимо снова вызывать функцию CheckMenuRadioItem, изменяя каждый раз только третий параметр в зависимости от того, какой член меню (радиокнопку) нажал пользователь. |
|
------- Отправлено: 21:08, 17-07-2007 | #4 |
Новый участник Сообщения: 20
|
Профиль | Отправить PM | Цитировать Спасибо.
![]() |
|
Отправлено: 23:28, 17-07-2007 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интерфейс - [решено] История переходов в меню Пуск (все вопросы) | kortez | Microsoft Windows 7 | 35 | 02-05-2011 10:09 | |
Разное - [решено] Доп-ое меню в св-вах "Мой компьютер" и Меню восстановление | forcik | Microsoft Windows 2000/XP | 3 | 24-12-2008 02:42 | |
Разное - Отсутствует меню "Свойства папки" в меню "сервис" папки. | __sa__nya | Microsoft Windows 2000/XP | 1 | 12-08-2008 16:12 | |
меню | bruder | Вебмастеру | 1 | 12-05-2008 03:48 | |
Меню | Suvor | Вебмастеру | 8 | 22-07-2003 15:30 |
|