RegisterClass和RegisterClassEx有什麼區別?
引言
繼上篇文章“VC CreateWindow 找不到視窗類”中將RegisterClassEx改為RegisterClass問題就解決了,究竟是什麼原因,RegisterClass和RegisterClassEx有什麼區別呢?
經過一番查詢和測試,終於找到了答案:
不同之處:
The RegisterClass function has been superseded by the RegisterClassEx function. You can still use RegisterClass, however, if you do not need to set the class small icon. In addition,their parameters are different.
E文看不太懂,經過測試就是一個引數的區別,如果使用RegisterClassEx 則WNDCLASSEX的hIconSm引數是必須設定的。
相關程式碼片:
//函式:MyRegisterClass
//作用:註冊視窗類
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
//將下面這條語句註釋,“CreateWindow”時就會出現“找不到視窗類”的錯誤;
wndclass.hIconSm = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
return RegisterClassEx(&wndclass);
}
//函式:InitInstance
//作用:初始化應用程式
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hwnd = NULL;
hwnd = CreateWindow(szAppName, _T("按鈕設計"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
if (hwnd == NULL)
{
TCHAR szBuf[128];
LPVOID lpMsgBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
MessageBox(NULL, (LPTSTR)lpMsgBuf, "hwnd", MB_OK);
}
BOOL ret = ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
return TRUE;
}
相關文章
- *和body有什麼區別
- Cache 和 Buffer 有什麼區別?
- mongodb和mysql有什麼區別MongoDBMySql
- shim和polyfill有什麼區別
- float和double有什麼區別?
- int 和 Integer 有什麼區別
- cookie和session 有什麼區別?CookieSession
- session 和 cookie 有什麼區別?SessionCookie
- modbus和tcp有什麼區別?TCP
- Nginx和Apache有什麼區別?NginxApache
- COOKIE和SESSION有什麼區別?CookieSession
- for update 和 for update of 有什麼區別
- PEAR 和 PECL 有什麼區別?
- IPFS和區塊鏈有什麼區別區塊鏈
- Java和Python是什麼?有什麼區別?JavaPython
- RPA和IPA有什麼區別
- Jsp和Servlet有什麼區別?JSServlet
- HTTP和HTTPS有什麼區別?HTTP
- VPS和HTTP有什麼區別?HTTP
- 命令和事件有什麼區別? - Oskar事件
- c++中&和&&有什麼區別C++
- DAO和Repository有什麼區別
- 青蛙和癩蛤蟆有什麼區別
- 什麼是報表工具?和 EXCEL 有什麼區別?Excel
- Java 介面和抽象類是什麼,有什麼區別Java抽象
- 什麼是 MicroPython?和CPython有什麼區別?Python
- 什麼是SCRM系統?和CRM有什麼區別?
- png是什麼格式 png和jpg有什麼區別
- xpgu是什麼 xgpu和xgp有什麼區別GPU
- Linux和Unix有什麼區別?兩者有什麼關係Linux
- rancher 和 Kubernetes有什麼區別?
- 群控和雲控有什麼區別?
- mac地址和ip地址有什麼區別Mac
- VIPER 和 MVVM 到底有什麼區別MVVM
- python和nodejs有什麼區別PythonNodeJS
- Frontend開發和UI有什麼區別?UI
- Code Area和Data Area有什麼區別
- 【Java面試】IO和NIO有什麼區別?Java面試