看到别人做菜单有很多种,而我就比较不要麻烦就用较简单的来学习下吧,好用就行了。
一、用编辑资源来添加菜单
我用的VC++6.0,VS2013也是一样的!其他的工具嘛,没有用, 不知道。
先插入或者说添加一个类型为菜单(MENU)的资源文件,然后就保存下,保存到当前项目的目录下面,然后编辑这个资源文件,资源文件的后缀名是“.rc”,把菜单资源的ID改好。
现在添加菜单项吧,就做个简单的,比如,一个“文件”,然后下级添加个“退出”。同时把在属性里面填写好ID,比如:我的“退出”的ID是:IDM_EXIIT。
也可以直接打开resource.h头文件,直接在上面修改,前提是要生成这个文件,这个文件是在保存资源文件后生成的。
保存,下面要写响应菜单的过程函数了,在这之前先添加一个头文件#include "resource.h",完整程序:
#include "windows.h"
#include "resource.h"
void ShowErrMsg()
{
LPVOID lpMsgBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
MessageBox(NULL, (LPTSTR)lpMsgBuf, "系统错误", MB_OK|MB_ICONSTOP);
//OutputDebugString();
LocalFree(lpMsgBuf);
}
LRESULT CALLBACK WinProc(HWND hwnd,UINT umsg,WPARAM wparam,LPARAM lparam);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrecInstance,
LPSTR lpCmdLine,
int nShowCmd
)
{
TCHAR* clsName="myclass";
WNDCLASS mwc={sizeof(WNDCLASS)};
//设计窗口类
mwc.lpfnWndProc = WinProc; //窗口处理函数
mwc.hbrBackground = (HBRUSH)COLOR_WINDOW; //窗口背景色
mwc.lpszClassName = clsName; // 窗口类名
mwc.style = CS_HREDRAW | CS_VREDRAW; //窗口类型
mwc.cbClsExtra = 0; //窗口扩展
mwc.cbWndExtra = 0; //窗口实例扩展
mwc.hCursor = NULL; //窗口鼠标光标
mwc.hIcon = NULL; //窗口的最小化图标
mwc.lpszMenuName = (CHAR *)IDR_MENUmain; //窗口菜单
mwc.hInstance = hInstance; //实例句柄
//注册窗口类
RegisterClass(&mwc);
//创建窗口
HWND hwnd = CreateWindow(
clsName, //类名,就是刚才注册的
//"HEHE",
TEXT("Windows的标题"), //窗口标题
WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX, //外观样式
400, //相对于父窗口的X坐标
150, //相对于父窗口的Y坐标
400, //窗口的宽
400, //窗口的高
NULL, //父窗口,没有就写NULL
LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENUmain)), //窗口菜单,没有就可以写NULL
hInstance, //当前应用程序的实例句柄
NULL); //附加数据,没有,为NULL
if( hwnd == NULL) //检查窗口是否创建成功
{
ShowErrMsg();
//DWORD err = GetLastError();
//TCHAR er[123] ;
//wsprintf(er,"%i",err);
//MessageBox(NULL,er,TEXT("提示"),MB_ICONWARNING);
MessageBox(NULL,TEXT("创建窗口失败"),TEXT("提示"),MB_ICONWARNING);
return 0;
}
//显示窗口和更新窗口
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hw