当前位置:编程学习 > C/C++ >>

小结一下win32 menu的使用:

[cpp]  
// 首先需要定义菜单的ID  
#define IDM_FILE_NEW  40001  
  
#define IDM_FILE_OPEN 40002  
  
#define IDM_EDIT_COPY 40003  
  
#define IDM_EDIT_CUT  40004  
  
HMENU    hMenu;  
HMENU     hMenuPop;  
  
// Menu Append  
hMenu = CreateMenu();       //主菜单,水平  
hMenuPop = CreateMenu();    //下拉的菜单,垂直  
  
AppendMenu(hMenuPop,MF_STRING,IDM_FILE_NEW,TEXT("New"));  
AppendMenu(hMenuPop,MF_STRING,IDM_FILE_OPEN,TEXT("Open"));  
AppendMenu(hMenu,MF_POPUP,(unsigned int)hMenuPop,TEXT("File"));  
  
hMenuPop = CreateMenu();  
  
AppendMenu(hMenuPop,MF_STRING,IDM_EDIT_COPY,TEXT("Copy"));  
AppendMenu (hMenuPop, MF_SEPARATOR, 0,           NULL) ;  
AppendMenu(hMenuPop,MF_STRING,IDM_EDIT_CUT,TEXT("Cut"));  
AppendMenu(hMenu,MF_POPUP,(unsigned int)hMenuPop,TEXT("Edit"));// Menu Insert  
InsertMenu(hMenu, 0, uTemp, IDM_EDIT_CUT+7, TEXT("NewAdd"));  
  
SetMenu(hwnd, hMenu);  
 
 
其他的都还好说,解释一下InsertMenu(因为网上能查到的使用InsertMenu的部分,都是CMenu的),InsertMenu
的第一个参数是要插入的菜单HMENU;第二个参数为要参入的菜单项的位置,比如这里的0代表插入到菜单New的前面(也就是最前面一项),1代表插入到New的后面(第二项);第三个参数指的是标志,一般指定UINT uTemp=MF_BYPOSITION | MF_POPUP就行;第四个参数指的是新菜单项的ID,这里是IDM_EDIT_CUT+7;
第五个参数指的是要加入菜单项的name;
 
无论是AppendMenu好还是InsertMenu好,操作之后都要SetMenu到原来的hwnd那,才能使操作之后的菜单项生效。。
 
为什么要有菜单的ID呢。。
我们来思考这样的一个问题-----当我们想要处理菜单项事件的时候,用什么来定位到想要处理的菜单项呢?
 
。。。
 
所以菜单项的ID还是挺重要的,因为我们需要在WM_COMMAND中通过这个ID来定位到某个菜单项:
 
[cpp] 
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)  
{  
    switch (message)  
    {  
    case WM_COMMAND:  
        switch (wParam)  
        {  
        case IDM_FILE_NEW:  
            MessageBox(hwnd, TEXT("this menu is IDM_FILE_NEW"), szAppName, MB_OK);  
            break;  
        case IDM_FILE_OPEN:  
            MessageBox(hwnd, TEXT("this menu is IDM_FILE_OPEN"), szAppName, MB_OK);  
            break;  
        default:  
            break;  
        }  
        break;  
            
    case WM_DESTROY:  
        PostQuitMessage (0) ;  
        return 0 ;  
    }  
    return DefWindowProc (hwnd, message, wParam, lParam) ;  
}  
 
 
此总结配图:
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,