学习win32 API开发6-给窗口添加菜单

看到别人做菜单有很多种,而我就比较不要麻烦就用较简单的来学习下吧,好用就行了。一、用编辑资源来添加菜单我用的VC++6.0,VS2013也是一样的!其他的工具嘛,没有用, 不知道。先插入或者说添加一个类型为菜单(MENU)的资源文件,然后就保存下,保存到当前项目的目录下面,然后编辑这个资源文件,资源文件的后缀名是“.rc”,把菜单资源的ID改好。现在添加菜单项吧,就做个简单的,比如
摘要由CSDN通过智能技术生成

看到别人做菜单有很多种,而我就比较不要麻烦就用较简单的来学习下吧,好用就行了。

一、用编辑资源来添加菜单

我用的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
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值