关于MFC创建window窗口的问题
CMyWnd::CMyWnd(){LPCTSTRlpszClassName=AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,::Loa...
CMyWnd::CMyWnd()
{
LPCTSTR lpszClassName = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,
::LoadCursor(NULL, IDC_ARROW), (HBRUSH)(COLOR_3DFACE+1)); CreateEx(WS_EX_CLIENTEDGE, lpszClassName,
"框架程序创建的窗口", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL);
} 这段代码中用于注册的AfxRegisterWndClass函数的参数我不懂,请给位给详细说说。我在网上找了半天也没找到,所以迫不得已来问这个问题,谢谢大家的帮助。 还有,window程序的这些变量类型,比如WPARAM等的一些我也搞不明白,有没有详细介绍这些类型的网址啊什么,请大家给推荐下,谢谢。 展开
{
LPCTSTR lpszClassName = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,
::LoadCursor(NULL, IDC_ARROW), (HBRUSH)(COLOR_3DFACE+1)); CreateEx(WS_EX_CLIENTEDGE, lpszClassName,
"框架程序创建的窗口", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL);
} 这段代码中用于注册的AfxRegisterWndClass函数的参数我不懂,请给位给详细说说。我在网上找了半天也没找到,所以迫不得已来问这个问题,谢谢大家的帮助。 还有,window程序的这些变量类型,比如WPARAM等的一些我也搞不明白,有没有详细介绍这些类型的网址啊什么,请大家给推荐下,谢谢。 展开
2个回答
2013-09-02
展开全部
AfxRegisterWndClass
LPCTSTR AFXAPI AfxRegisterWndClass(
UINT nClassStyle,
HCURSOR hCursor = 0,
HBRUSH hbrBackground = 0,
HICON hIcon = 0
);
返回值:
一个以null结尾的字符串,其中包含了类名。你可以将这个类名传递给CWnd或其派生类的成员函数Create以创建一个窗口。这个名字是由微软基础类库生成的。
注意:
返回值是指向一个静态缓冲区的指针。如果要保存这个字符串,将它赋给一个CString变量。
参数: nClassStyle 指定Windows的类风格或通过位或(|)操作符生成的风格的组合,用于窗口类类风格的列表参见Win32 SDK文档中的WNDCLASS结构。如果这个值为NULL,缺省的风格如下: · 将鼠标风格设为CS_DBLCLICKS,当用户双击鼠标时,将向窗口过程发送双击消息。 · 将鼠标光标风格设为Windows 的标准风格IDC_ARROW。 · 将背景刷子设为NULL,因此窗口将不会擦去它的背景。 · 将图标设为标准的波浪标志的Windows徽标。 hCursor 指定了一个鼠标光标资源句柄,将被用于该窗口类所创建的每个窗口。如果你使用缺省值0,你将得到标准的IDC_ARROW光标。 hbrBackground 指定了一个刷子资源句柄,将被用于该窗口类所创建的每个窗口。如果你使用缺省值0,你将获得一个Null背景刷子,同时在WM_ERASEBKGND进程中,窗口将不会释放其背景。 hIcon 指定了一个图标资源句柄,将被用于该窗口类所创建的每个窗口。如果你使用缺省值0,你将得到标准的波浪标志的Windows徽标。
说明:
微软基础类库自动注册了一些标准的窗口类。如果你希望注册自己的窗口类,可以调用这个函数。
AfxRegisterWndClass为类注册的名字仅与参数有关。如果你用相同的参数多次调用了AfxRegisterWndClass,它仅在第一次调用时才注册类。随后用相同的参数进行调用仅简单地返回以及注册的类名。
如果你用相同的参数为多个CWnd的派生类调用了AfxRegisterWndClass,而不是为每个类生成一个独立的窗口类,那么所有的类共用相同的窗口类。如果使用了CS_CLASSDC风格,这就会引起问题。你将获得一个CS_CLASSDC窗口类,而不是多个CS_CLASSDC窗口类,并且使用这个类的所有的C++窗口都共用相同的DC。为了避免这个问题,可以调用AfxRegisterClass来注册类。
MSDN里面就有介绍了
LPCTSTR AFXAPI AfxRegisterWndClass(
UINT nClassStyle,
HCURSOR hCursor = 0,
HBRUSH hbrBackground = 0,
HICON hIcon = 0
);
返回值:
一个以null结尾的字符串,其中包含了类名。你可以将这个类名传递给CWnd或其派生类的成员函数Create以创建一个窗口。这个名字是由微软基础类库生成的。
注意:
返回值是指向一个静态缓冲区的指针。如果要保存这个字符串,将它赋给一个CString变量。
参数: nClassStyle 指定Windows的类风格或通过位或(|)操作符生成的风格的组合,用于窗口类类风格的列表参见Win32 SDK文档中的WNDCLASS结构。如果这个值为NULL,缺省的风格如下: · 将鼠标风格设为CS_DBLCLICKS,当用户双击鼠标时,将向窗口过程发送双击消息。 · 将鼠标光标风格设为Windows 的标准风格IDC_ARROW。 · 将背景刷子设为NULL,因此窗口将不会擦去它的背景。 · 将图标设为标准的波浪标志的Windows徽标。 hCursor 指定了一个鼠标光标资源句柄,将被用于该窗口类所创建的每个窗口。如果你使用缺省值0,你将得到标准的IDC_ARROW光标。 hbrBackground 指定了一个刷子资源句柄,将被用于该窗口类所创建的每个窗口。如果你使用缺省值0,你将获得一个Null背景刷子,同时在WM_ERASEBKGND进程中,窗口将不会释放其背景。 hIcon 指定了一个图标资源句柄,将被用于该窗口类所创建的每个窗口。如果你使用缺省值0,你将得到标准的波浪标志的Windows徽标。
说明:
微软基础类库自动注册了一些标准的窗口类。如果你希望注册自己的窗口类,可以调用这个函数。
AfxRegisterWndClass为类注册的名字仅与参数有关。如果你用相同的参数多次调用了AfxRegisterWndClass,它仅在第一次调用时才注册类。随后用相同的参数进行调用仅简单地返回以及注册的类名。
如果你用相同的参数为多个CWnd的派生类调用了AfxRegisterWndClass,而不是为每个类生成一个独立的窗口类,那么所有的类共用相同的窗口类。如果使用了CS_CLASSDC风格,这就会引起问题。你将获得一个CS_CLASSDC窗口类,而不是多个CS_CLASSDC窗口类,并且使用这个类的所有的C++窗口都共用相同的DC。为了避免这个问题,可以调用AfxRegisterClass来注册类。
MSDN里面就有介绍了
2013-09-02
展开全部
AfxRegisterWndClass其实和API中的RegisterClass差不多一样,查这个就好相关参数和WParam这类东西一般可以在MSDN上查到,像WParam这样的类型定义,你对他点右键,有一项是“转到定义”,可以看到他的实际定义。其实最终都是一些基础类型的别名。像WPARAM定义在头文件Windef.h头文件中:typedef UINT WPARAM;MFC中的WParam(不是WPARAM)有自己的定义,你可以用同样的方法查下。很多东西其实就在代码里,代码里没有的MSDN也会有。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询