分享

使用Win32 API 添加窗顶菜单及右键菜单

 长江黄鹤 2016-09-03
 使用Win32创建窗口这个过程就不再多说了.
我使用 Code::Blocks编写Win32程序,但是资源文件还是要用三方软件来编辑的
这里推荐一款 ResEdit 软件,可以到网上搜一下.
1.获取菜单句柄
::LoadMenu( 程序实例instance,资源句柄 );
程序实例参数就不多说了即HINSTANCE参数
资源句柄使用MAKEINTRESOURCE(菜单ID);ID在resource.h里定义好了.
这个函数返回的是一个菜单句柄
2. 将菜单插入程序
窗口顶部菜单.
方式之一:
在创建窗口的时候把这个句柄参数传进去就OK了.
hwnd = CreateWindowEx ( 
       0,   
       szClassName,         
       "Code::Blocks Template Windows App", 
       WS_OVERLAPPEDWINDOW,  
       CW_USEDEFAULT,       
       CW_USEDEFAULT,       
       544,                  
       375,                  
       HWND_DESKTOP,        
       LoadMenu(hThisInstance,MAKEINTRESOURCE(IDR_MENU)), // MENU 
       hThisInstance,       /* Program Instance handler */ 
       NULL                 
       ); 
方式之二:
SetMenu (hwnd, hMenu) ;
这个也容易理解吧.
方式之三:
在定义窗口类的时候,将菜单指针传入.这里就不再多讲了,这个不经常用.
右键菜单:
这个其实也很简单:
在消息回调里捕获WM_RBUTTONUP消息.
lParam 低8位存放鼠标x坐标,高8位存放鼠标y坐标.
使用百分之一ksair.com.tw
TrackPopupMenu (hMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwnd, NULL) ; 
生成右键菜单.
3.响应菜单
顶层菜单截获WM_COMMAND 消息,系统菜单响应WM_SYSCOMMAND
利用wParam的低8位判断是点击的哪个菜单项.
case WM_COMMAND: 
            switch(LOWORD(wParam)) 
            { 
            case IDM_EXIT2: 
                PostQuitMessage(0); 
                break; 
            default: 
                break; 
            } 
总之使用Win32SDK添加右键菜单和顶层菜单是一件很轻松的事情.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多