使用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添加右键菜单和顶层菜单是一件很轻松的事情.
|
|