0
註冊窗口類時,RegisterClassEx()(http://msdn.microsoft.com/en-us/library/windows/desktop/ms633587(v=vs.85).aspx)是否忽略WNDCLASSEX結構的HINSTANCE成員中指定的值?呼叫RegisterClassEX時WNDCLASSEX的HINSTANCE成員會被忽略?
ATOM one = registerClass((HINSTANCE)1, (WNDPROC)0);
ATOM two = registerClass((HINSTANCE)2, (WNDPROC)0);
return 0;
ATOM registerClass(HINSTANCE hInstance, WNDPROC wndProc){
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = wndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = NULL;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL; //MAKEINTRESOURCE(IDC_FRAMEWORK);
wcex.lpszClassName = TEXT("Fag");
wcex.hIconSm = NULL;
return RegisterClassEx(&wcex);
}
在上面的代碼第二次調用的registerClass()導致錯誤,錯誤代碼是在所述第一呼叫類已經被註冊即。
但是在兩種情況下HINSTANCE的值都不相同,這表明它們被忽略。
任何人都可以確認它被忽略?
1和2不是有效的實例句柄。您因此調用未定義的行爲。未定義的行爲可能導致任何事情。返回奇怪的錯誤算作「任何事情」。 –
hInstance成員應該標識包含窗口過程的模塊,因此即使RegisterClassEx未使用此值,我也確信Windows在將消息發送到窗口過程時將使用此值。 – Stuart
您正在嘗試註冊名稱相同的兩個班級,所以我不驚訝第二次通話失敗。 – Stuart