在上一节中我们练习了注册一个类,并通用此类实例化一个对象。 今天我们反过来学, 对于己实例化的窗体如何读取自身的注册信息,Window 同样提供了对应的方法。
(一) 函数声明
int GetClassName(HWND hWnd, LPTSTR lpClassName, int nMaxCount );
获取实例窗体类名
BOOL GetClassInfoEx(HINSTANCE hinst, LPCTSTR lpszClass, LPWNDCLASSEX lpwcx );
获取进程中指定类信息
BOOL GetClassInfo(HINSTANCE hInstance, LPCTSTR lpClassName, LPWNDCLASS lpWndClass );
获取进程中指定类信息(与GetClassInfoEx不同之处在于WNDCLASSEX返回值多了icomsm值)
这几个函数比较简单
Code: 本例演示读取窗体的类名以及根据类名提取其他类信息
WNDCLASSEX wcx = {0};
wcx.cbSize = sizeof(wcx);
TCHAR szClassName[256] = {0};
GetClassName(hWnd, szClassName, 256);
if (GetClassInfoEx(GetModuleHandle(NULL), szClassName, &wcx))
{
TCHAR szClassInfo[1024];
_stprintf(szClassInfo,
_T("ClassName: %s\n")
_T("Style: %d\n")
_T("class Extra: %d\n")
_T("Wnd Extra: %d\n")
_T("Cursor: 0X%X\n")
_T("Icon: %X\n")
_T("Background: 0X%0X\n")
_T("MenuName: %s\n")
_T("Instance: 0X%X\n")
_T("WndProc: 0X%06X\n"),
wcx.lpszClassName,
wcx.style,
wcx.cbClsExtra,
wcx.cbWndExtra,
wcx.hCursor,
wcx.hIcon,
wcx.hbrBackground,
wcx.lpszMenuName,
wcx.hInstance,
wcx.lpfnWndProc);
SetWindowText(GetDlgItem(hWnd, ID_LABINFO), szClassInfo);
OutputDebugString(szClassInfo);
}
wcx.cbSize = sizeof(wcx);
TCHAR szClassName[256] = {0};
GetClassName(hWnd, szClassName, 256);
if (GetClassInfoEx(GetModuleHandle(NULL), szClassName, &wcx))
{
TCHAR szClassInfo[1024];
_stprintf(szClassInfo,
_T("ClassName: %s\n")
_T("Style: %d\n")
_T("class Extra: %d\n")
_T("Wnd Extra: %d\n")
_T("Cursor: 0X%X\n")
_T("Icon: %X\n")
_T("Background: 0X%0X\n")
_T("MenuName: %s\n")
_T("Instance: 0X%X\n")
_T("WndProc: 0X%06X\n"),
wcx.lpszClassName,
wcx.style,
wcx.cbClsExtra,
wcx.cbWndExtra,
wcx.hCursor,
wcx.hIcon,
wcx.hbrBackground,
wcx.lpszMenuName,
wcx.hInstance,
wcx.lpfnWndProc);
SetWindowText(GetDlgItem(hWnd, ID_LABINFO), szClassInfo);
OutputDebugString(szClassInfo);
}
(二) 特别声明
GetClassInfoEx 以及 GetClassInfo 在读取其他进行的窗体类信息会失败(在后面章节中我们再讲述)