使用Win32创建窗口这个过程就不再多说了.

我使用 Code::Blocks编写Win32程序,但是资源文件还是要用三方软件来编辑的

这里推荐一款 ResEdit 软件,可以到网上搜一下.

1.获取菜单句柄

::LoadMenu( 程序实例instance,资源句柄 );

程序实例参数就不多说了即HINSTANCE参数

资源句柄使用MAKEINTRESOURCE(菜单ID);ID在resource.h里定义好了.

这个函数返回的是一个菜单句柄

2. 将菜单插入程序

窗口顶部菜单.

方式之一:

在创建窗口的时候把这个句柄参数传进去就OK了.

 

 
  
  1. hwnd = CreateWindowEx ( 
  2.        0,   
  3.        szClassName,         
  4.        "Code::Blocks Template Windows App"
  5.        WS_OVERLAPPEDWINDOW,  
  6.        CW_USEDEFAULT,       
  7.        CW_USEDEFAULT,       
  8.        544,                  
  9.        375,                  
  10.        HWND_DESKTOP,        
  11.        LoadMenu(hThisInstance,MAKEINTRESOURCE(IDR_MENU)), // MENU 
  12.        hThisInstance,       /* Program Instance handler */ 
  13.        NULL                 
  14.        ); 

方式之二:

 

SetMenu (hwnd, hMenu) ;

 

这个也容易理解吧.

方式之三:

在定义窗口类的时候,将菜单指针传入.这里就不再多讲了,这个不经常用.

右键菜单:

这个其实也很简单:

在消息回调里捕获WM_RBUTTONUP消息.

lParam 低8位存放鼠标x坐标,高8位存放鼠标y坐标.

使用

 
  
  1. TrackPopupMenu (hMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwnd, NULL) ; 

生成右键菜单.

3.响应菜单

顶层菜单截获WM_COMMAND 消息,系统菜单响应WM_SYSCOMMAND

利用wParam的低8位判断是点击的哪个菜单项.

 

 
  
  1. case WM_COMMAND: 
  2.             switch(LOWORD(wParam)) 
  3.             { 
  4.             case IDM_EXIT2: 
  5.                 PostQuitMessage(0); 
  6.                 break
  7.             default
  8.                 break
  9.             } 

总之使用Win32SDK添加右键菜单和顶层菜单是一件很轻松的事情.