现在的位置: 首页 > 综合 > 正文

MFC API——》AfxRegisterWndClass

2014年11月19日 ⁄ 综合 ⁄ 共 1549字 ⁄ 字号 评论关闭

如果程序主窗口不是由CframeWnd派生而来,而由CWnd派生而来,那么在创建窗口的时候,必须注册自己的WNDCLASS,因为CWnd::CreateEX不接受NULL
WNDCLASS名称

这种情况下,注册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

    颜色表接口是COLOR_3DFACE       
COLOR_3DFACE+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样式。

抱歉!评论已关闭.