更新时间:2015-12-05 19:34:53浏览次数:1+次
WORD wClsID = (WORD)GetClassLong(hwnd,GCW_ATOM);//WORD和ATOM类型一样
而注册窗口类RegisterClass返回的就是这个窗口类ID,代码如下:ATOM Class = RegisterClass(&wndClass);// - ATOM类型就是WORD类型
而我们平常只检测RegisterClass返回值是否为NULL,如果为NULL则表示注册窗口类失败,否则就返回一个非零值,这个非零值其实就是注册成功的窗口类ID。#include "windows.h"
#include <tchar.h>
LRESULT CALLBACK WinProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrev,LPSTR lpCmd,int iShow)
{
TCHAR ClassName[] = _T("MyClass");
TCHAR title[] = _T("title");
WNDCLASS wndClass;
wndClass.cbClsExtra=0;
wndClass.cbWndExtra=0;
wndClass.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);
wndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndClass.hInstance = hInstance;
wndClass.lpfnWndProc = WinProc;
wndClass.lpszClassName = ClassName;
wndClass.lpszMenuName=NULL;
wndClass.style=CS_HREDRAW|CS_VREDRAW;
ATOM Class = RegisterClass(&wndClass);// - ATOM类型就是WORD类型
if(!Class)
{
return 0;
}
HWND hwnd = CreateWindow(ClassName,title,WS_OVERLAPPEDWINDOW,0,0,100,100,NULL,NULL,hInstance,NULL);
DWORD Atom = GetClassLong(hwnd,GCW_ATOM);
if(Class==Atom)
{
MessageBox(hwnd,_T("注册窗口类的窗口类ID和通过GetClassLong获取的窗口类ID是一致的"),_T("tip"),0);
}
}
你可以运行看看,但是会发现一个问题,那就是,这两个得到的窗口类ID竟然不相同。因为没有弹出这个消息框提示一致。难道是我们理解的有问题??LRESULT CALLBACK WinProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
return DefWindowProc(hwnd, message, wParam, lParam);
}
然后运行程序,结果创建窗口得到了非零的句柄值,表示窗口创建成功了。那么剩下的代码就是对两个得到的窗口类ID做比较,然后发现两个值是一致的,且弹出来了最后的消息框,从而得到了验证。