MFC中注册WNDCLASS样式并建立窗口
2014-11-16 10:31
148 查看
如果程序主窗口不是由CframeWnd派生而来,而是由CWnd派生而来,那么在创建窗口的时候,必须注册自己的WNDCLASS,因为CWnd::CreateEX不接受NULL WNDCLASS名称。
这种情况下,注册WNDCLASS样式半建立窗口有两种方式。
方式一,定义一个WNDCLASS结构实例,并对每个字段进行初始化,然后调用::RegisterClass或者MFC的全局函数AfxRegisterClass注册WNDCLASS。
如:
这种方式比较麻烦。
方式二:用MFC的全局函数AfxRegisterWndClass注册WNDCLASS,不需要定义所有字段,只需要关注其4个参数值。函数原型:LPCTSTR AfxRegisterWndClass(UINT nClassStyle,HCURSOR hCursor=0,HBRUSH hbrBackground=0,HICON hIcon=0);
第一个参数指定类样式,定义窗口的某种操作特性;第二个参数指定窗口识别“类光标”;第三个参数指定窗口默认背景颜色,可以传递一个画刷句柄,也可以指定一个预定义的Windows系统颜色并加1,第四个参数指定windows用来在桌面上、任务栏和其它地方代表应用程序的图标句柄,可以自定义图标然后加载,也可以加载系统图标。
该函数返回一个包含WNDCLASS名称的非空结尾字符串的指针,作用CreateEX函数的参数,用以创建窗口。
如:
注:决定窗口能否缩放的部份,是创建窗口是为窗口指定样式的参数部份。
一般传递的参数是WS_OVERLAPPEDWINDOW,其定义如下:
其中WS_THICKFRAME样式增加了一个其边和角可以用鼠标抓取并拖动的可调整大小的边框,如果不定义这个样式,则所生成的窗口不能缩放,此时,一般情况下是把最大化按钮也撤消,即不定义WS_MAXIMIZE样式。
这种情况下,注册WNDCLASS样式半建立窗口有两种方式。
方式一,定义一个WNDCLASS结构实例,并对每个字段进行初始化,然后调用::RegisterClass或者MFC的全局函数AfxRegisterClass注册WNDCLASS。
如:
WNDCLASS wc; wc.style=0; wc.lpfnWndProc=(WNDPROC)WndProc; wc.cbClsExtra=0; wc.cbWndExtra=0; wc.hInstance=hInstance; wc.hIcon=LoadIcon(NULL,IDI_WINLOGO); wc.hCursor=LoadCursor(NULL,IDC_ARROW); wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1); wc.lpszMenuName=NULL; wc.lpszClassName="MyWndClass"; RegisterClass(&wc);
这种方式比较麻烦。
方式二:用MFC的全局函数AfxRegisterWndClass注册WNDCLASS,不需要定义所有字段,只需要关注其4个参数值。函数原型:LPCTSTR AfxRegisterWndClass(UINT nClassStyle,HCURSOR hCursor=0,HBRUSH hbrBackground=0,HICON hIcon=0);
第一个参数指定类样式,定义窗口的某种操作特性;第二个参数指定窗口识别“类光标”;第三个参数指定窗口默认背景颜色,可以传递一个画刷句柄,也可以指定一个预定义的Windows系统颜色并加1,第四个参数指定windows用来在桌面上、任务栏和其它地方代表应用程序的图标句柄,可以自定义图标然后加载,也可以加载系统图标。
该函数返回一个包含WNDCLASS名称的非空结尾字符串的指针,作用CreateEX函数的参数,用以创建窗口。
如:
CString strWndClass=AfxRegisterWndClass(CS_DBLCLKS, AfxGetApp()->LoadStandardCursor(IDC_ARROW), (HBRUSH)(COLOR_3DFACE+1), AfxGetApp()->LoadStandardIcon(IDI_WINLOGO)); CreateEx(0,strWndClass,_T("my program"), WS_OVERLAPPED|WS_SYSMENU|WS_CAPTION|WS_MINIMIZEBOX, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL);
注:决定窗口能否缩放的部份,是创建窗口是为窗口指定样式的参数部份。
一般传递的参数是WS_OVERLAPPEDWINDOW,其定义如下:
#define WS_OVERLAPPEDWINDOW(WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZE|WS_MAXIMIZE);
其中WS_THICKFRAME样式增加了一个其边和角可以用鼠标抓取并拖动的可调整大小的边框,如果不定义这个样式,则所生成的窗口不能缩放,此时,一般情况下是把最大化按钮也撤消,即不定义WS_MAXIMIZE样式。
相关文章推荐
- MFC中注册WNDCLASS样式并建立窗口(使用WNDCLASS创建无父窗口的窗口)
- MFC中注册WNDCLASS样式并建立窗口
- MFC中更改窗口的样式
- MFC注册窗口类以及FindWindow按窗口类名查询
- MFC注册窗口类以及FindWindow按窗口类名查询
- MFC窗口样式及其值(WS_Style)即CreateWindow的参数dwStyle
- MFC学习 修改窗口样式
- MFC中更改窗口样式
- [转载]MFC注册窗口类以及FindWindow按窗口类名查询
- VC++2005 MFC 利用非模态窗口的建立类似选项卡的页面
- MFC改变窗口样式
- 模式识别第二课 建立MFC窗口+插入图片+处理+显示图片
- MFC学习笔记.day01续-调试MessageBox,注册窗口,创建窗口,显示,更新,消息循环,回调函数
- MFC应用程序中处理消息的顺序(窗口建立与销毁)
- MFC注册窗口类以及FindWindow按窗口类名查询
- MFC建立一个文档视图的工程,然后在窗口上显示数据
- MFC飞机大战开发之建立工程、设置窗口
- 建立MFC窗口
- MFC 窗体注册 WNDCLASS
- MFC 窗口样式