当前第2页 返回上一页
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
break ;
default :
break ;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
BOOL RegisterWindow()
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof(wce);
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hIconSm = NULL;
wce.hInstance = NULL;
wce.lpfnWndProc = WndProc;
wce.lpszClassName = "DllMain" ;
wce.lpszMenuName = NULL;
wce.style = CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS;
ATOM nAtom = RegisterClassEx(&wce);
if (nAtom == 0)
return FALSE;
return true;
}
|
RegisterWindow()中注册的窗口类名称为"DllMain",我们在dll的主函数中调用该注册函数完成注册:
1 2 3 4 5 6 7 8 9 10 | BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
....
RegisterWindow();
return TRUE;
}
}
|
在我们的主程序中使用该窗口类创建窗口:
1 2 3 4 5 6 7 8 9 10 11 | int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
...
HWND hWnd = CreateMain( "DllMain" , "我是一个Dll注册的窗口" );
Display(hWnd);
Message();
return 0;
}
|
运行程序你会发现我们也成功生产了这个窗口:

2.3 局部窗口类
局部窗口类从定义上来说,凡是未在wce的style中添加CS_GLOBALCLASS,而注册的窗口类都是局部窗口类。
1 | wce.style = CS_HREDRAW | CS_VREDRAW;
|
我们在上一文中注册的窗口就是一个局部的窗口类,它的特点就是只能在注册的作用域内使用,由于它和全局窗口类只在注册的style和作用域上有分别,这里就不再详述,如要了解,请参照上一文。
以上就是Win32 SDK基础(五)之关于窗口类的简单介绍的详细内容,更多文章请关注木庄网络博客!
返回前面的内容
相关阅读 >>
win32 sdk基础(十三)之键盘和鼠标消息的详细介绍
win32 sdk基础(四)之如何从零开始创建windows窗口的第二步
关于sdk基础的详细介绍
win32 sdk基础(二)之关于cl.exe和link.exe编译和连接程序的详解(图)
win32 sdk基础(五)之关于窗口类的简单介绍
win32是什么意思?
win32 sdk基础(十一)之消息队列和getmessage/peekmessage、sendmessage/postmesage的详解
win32 sdk基础(十二)之wm_paint消息的处理(图)
win32 sdk基础(六)之详解窗口类的查找过程和相关api
win32和win64的区别是什么
更多相关阅读请进入《win32》频道 >>
转载请注明出处:木庄网络博客 » Win32 SDK基础(五)之关于窗口类的简单介绍