Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Вниз

Как создать меню полностью на WinAPI?   Найти похожие ветки 

 
Swimmer ©   (2004-03-25 22:40) [0]

Я создаю программу полность на WinAPI (без VCL). Вроде во всем разобрался, но нигде не могу найти инфу по созданию меню. Не подскажите, где ее (инфу) найти, или как его (меню) создавать.


 
rimd ©   (2004-03-26 10:31) [1]

API CreateMenu


 
Diamond Cat ©   (2004-03-26 16:41) [2]

еще можно создать меню в ресурсном файле а потом просто назначить его своему окну при его компановке или позже через SetMenu.


 
DVM ©   (2004-03-26 21:02) [3]


> Вроде во всем разобрался, но нигде не могу найти инфу по
> созданию меню.

Не может быть. В справке по Win32 поставляемой с Делфи все это есть.


 
Swimmer ©   (2004-03-26 22:12) [4]

А ресурсов в рунете нету по этому поводу?


 
Diamond Cat ©   (2004-03-26 23:15) [5]

создание попапменю
function WinProc (hWnd: THandle; nMsg: UINT; wParam, lParam: Cardinal): Cardinal; export; stdcall;
begin
wm_command:
    begin
        if wparam=1 then делаем чтото по команде 1
...................................................
        if wparam=4 then postquitmessage(0);
end;{of wm_command}
end;

procedure menucreate(wnd:hwnd);
begin
men:=CreatePopupMenu;
     if men=0 then messagebox(wnd,"не создалось меню","Auto_scroll",mb_ok);
       AppendMenu(men,mf_ByCommand, 1, "строка один");
       AppendMenu(men,mf_ByCommand,2,"строка два");
       AppendMenu(men,mf_ByCommand,3,"строка 3");
       AppendMenu(men,MF_SEPARATOR,0,nil);
       AppendMenu(men,mf_ByCommand,4,"Выход");
       EnableMenuItem(men,3,MF_GRAYED);
end;

procedure WinMain;
var
 hWnd: THandle;
 Msg: TMsg;
begin
 WndClassEx.cbSize := sizeOf (TWndClassEx);
.....  
 if RegisterClassEx (WndClassEx) = 0 then begin
 MessageBox (.....);
 halt;
 end ;
   hWnd := CreateWindowEx ( .....);
     menucreate(hwnd);
   while GetMessage (Msg, 0, 0, 0) do
     begin
       TranslateMessage (Msg);
       DispatchMessage (Msg);
     end;
end;
практически также  создается  с помощью createmenu  и просто меню


 
марсинанин   (2004-03-28 14:02) [6]

почти как у Diamond Cat ©, но главное меню целиком с попапами


 WindowH    :HWnd; //handle главного окна
 MenuHandle :HMENU;
 hFileSMenu :HMENU;
 hDeviceSMenu :HMENU;
 hViewSMenu :HMENU;
 hHelpSMenu :HMENU;
...............
procedure InitMainMenu;
begin
 hFileSMenu := CreatePopupMenu;
    AppendMenu(hFileSMenu, MF_STRING or MF_ENABLED, 111, "Open File");
    AppendMenu(hFileSMenu, MF_STRING or MF_ENABLED, 112, "Save.....");
    AppendMenu(hFileSMenu, MF_STRING or MF_ENABLED, 113, "Save As..");
    AppendMenu(hFileSMenu, MF_SEPARATOR, 0, "-");
    AppendMenu(hFileSMenu, MF_STRING or MF_ENABLED, 114, "Close..");
 hDeviceSMenu := CreatePopupMenu;
    AppendMenu(hDeviceSMenu, MF_STRING or MF_ENABLED, 121, "Generate Data");
    AppendMenu(hDeviceSMenu, MF_SEPARATOR, 0, "-");
    AppendMenu(hDeviceSMenu, MF_STRING or MF_ENABLED, 122, "Options");
 hViewSMenu := CreatePopupMenu;
    AppendMenu(hViewSMenu, MF_STRING or MF_ENABLED,131, "Zoom  In(+)");
    AppendMenu(hViewSMenu, MF_STRING or MF_ENABLED,132, "Zoom Out(-)");
    AppendMenu(hViewSMenu, MF_SEPARATOR, 0, "-");
    AppendMenu(hViewSMenu, MF_STRING or MF_ENABLED,133, "Hello, World");
 hHelpSMenu := CreatePopupMenu;
    AppendMenu(hHelpSMenu, MF_STRING or MF_ENABLED,141, "Help Contexts");
    AppendMenu(hHelpSMenu, MF_STRING or MF_ENABLED,142, "Troubles?");
    AppendMenu(hHelpSMenu, MF_SEPARATOR, 0, "-");
    AppendMenu(hHelpSMenu, MF_STRING or MF_ENABLED,143, "About this...");
 MenuHandle := CreateMenu;
    AppendMenu(MenuHandle, MF_POPUP or MF_ENABLED, hFileSMenu, "File...");
    AppendMenu(MenuHandle, MF_POPUP or MF_ENABLED, hDeviceSMenu,"My Device");
    AppendMenu(MenuHandle, MF_POPUP or MF_ENABLED, hViewSMenu, "View ");
    AppendMenu(MenuHandle, MF_POPUP or MF_ENABLED, hHelpSMenu, "Help!");
 SetMenu(WindowH,MenuHandle);
 DrawMenuBar(WindowH);
end;


InitMainMenu вызывается сразу после создания окна WindowH

обработка событий:


// OnCommand вызывается из оконной прцедуры как реакция на  WM_COMMAND

function OnCommand(WParam,LParam : LongInt) : LongInt;
begin
result := 0;
 case LOWORD(wParam) of
   111: result := OpenProc;
   112: result := SaveProc;
   113: result := SaveAsProc;
   114: PostQuitMessage(0);//File Exit

   121: result := GenProc;
   122:;

   131: result := ZoomInProc;
   132: result := ZoomOutProc;
   133:;

   141:;
   142:;
   143:;
 end;
 
end;


циферки лучше оформить как константы

при завершении работы, после цикла обработки сообщений:


 DestroyMenu(hFileSMenu);
 DestroyMenu(hDeviceSMenu);
 DestroyMenu(hViewSMenu);
 DestroyMenu(hHelpSMenu);
 DestroyMenu(MenuHandle);


но, вообще говоря, нормальные люди грузят такие меню из ресурса..



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.034 c
1-1083497726
anod
2004-05-02 15:35
2004.05.16
Список фаилов в меню


14-1082983229
WondeRu
2004-04-26 16:40
2004.05.16
Моделирование жизни


1-1083561991
Ivolg
2004-05-03 09:26
2004.05.16
Компонента


14-1082740143
Goida
2004-04-23 21:09
2004.05.16
Тест 3D Mark 2001 на разных компьютерах...


1-1083322967
Amid
2004-04-30 15:02
2004.05.16
Ошибка при читении функции из DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский