以下示例显示如何为应用程序创建类菜单,创建使用类菜单的窗口以及窗口过程中的过程菜单命令。
以下是应用程序头文件的相关部分:
//菜单模板资源标识符
#define IDM_MYMENURESOURCE 3
以下是本应用程序的相关部分:
HINSTANCE hinst;
int APIENTRY WinMain(hinstance,hPrevInstance,lpCmdLine,nCmdShow)
HINSTANCE hinstance;
HINSTANCE hPrevInstance;
LPSTR lpCmdLine;
int nCmdShow;
{
MSG msg; // 信息
WNDCLASS wc; // windowclass数据
HWND hwnd; //处理主窗口
//为主窗口创建窗口类。指定
//菜单模板资源的标识符为
// lpszMenuName要创建的WNDCLASS结构的成员
//类菜单。
wc.style = 0;
wc.lpfnWndProc = (WNDPROC) MainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hinstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = MAKEINTRESOURCE(IDM_MYMENURESOURCE);
wc.lpszClassName = "MainWClass";
if(!RegisterClass(& wc))
return FALSE;
hinst = hinstance;
//创建主窗口。将hmenu参数设置为NULL
// Windows使用窗口的类菜单。
hwnd = CreateWindow("MainWClass", "Sample Application",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hinstance,
NULL);
if (hwnd == NULL)
return FALSE;
//使窗口可见,并发送WM_PAINT消息
//窗口过程
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
//启动主消息循环。
while(GetMessage(& msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
UNREFERENCED_PARAMETER(hPrevInstance);
}
LRESULT APIENTRY MainWndProc(hwnd,uMsg,wParam,lParam)en
HWND hwnd;
UINT uMsg;
WPARAM wParam;
LPARAM lParam;
{
开关(uMsg){
.
. //处理其他窗口消息
.
case WM_COMMAND:
//测试命令项的标识符。
开关(LOWORD(wParam)){
case IDM_FI_OPEN:
DoFileOpen(); //应用程序定义
break;
case IDM_FI_CLOSE:
DoFileClose(); //应用程序定义
break;
.
. //处理其他菜单命令。
.
默认:
break;
}
return 0;
.
. //处理其他窗口消息
.
默认:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return NULL;
}