Maksim V
14-07-2007, 21:53
Приветствую. Интересует создание чекбокса в меню. Само меню грузится из ресурса. Вообщем если что, то сразу тут показал "наброски" ресурсов и кода. Подскажите как правильно подправить код (или ресурс меню), чтобы при нажатии в меню появлялся/исчезал чекбокс. Заранее спасибо.
Меню
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.
Меню
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.