Я недавно пытался создать класс окна с помощью Windows API на C++. Однако всякий раз, когда я пытаюсь вызвать ShowWindow, функция устанавливает последнюю ошибку в 1400 (ERROR_INVALID_WINDOW_HANDLE). Попробовав на некоторое время, я наткнулся на следующий пример: http://blogs.msdn.com/b/oldnewthing/archive/2005/04/22/410773.aspx#commentsShowWindow Неверный дескриптор окна
Даже создавая новый проект (я использую MSVC 2008 Express) и скопировать код в точности (который я ненавижу делать), я обнаружил, что, в то время как код успешно создали окно, функция ShowWindow еще сообщила об ошибке 1400. Вот отрывок из кода найденного в приведенной выше ссылке:
int PASCAL
WinMain(HINSTANCE hinst, HINSTANCE, LPSTR, int nShowCmd)
{
g_hinst = hinst;
if (SUCCEEDED(CoInitialize(NULL))) {
InitCommonControls();
RootWindow *prw = RootWindow::Create();
if (prw) {
ShowWindow(prw->GetHWND(), nShowCmd);
int error = GetLastError(); //Line added by me, error gets set to 1400.
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
CoUninitialize();
}
return 0;
}
(полный код можно найти по ссылке выше)
Если у кого-нибудь есть идеи о том, как иметь дескриптор окна в качестве переменной-члена класс, не получивший ошибку 1400 на ShowWindow, я был бы очень признателен за помощь.
Это может показаться тривиальным, но вы * проверили * возвращаемое значение GetHWND(), чтобы убедиться, что он установлен на действительный дескриптор окна? Т.е. 'if (! :: IsWindow (prw-> GetHWND()) {panic}'? Код, который вы связали (который был честно устарел, когда он был написан, а время не принесло никаких пользы) полагается на обработку WM_NCCREATE, чтобы установите дескриптор окна элемента. Если это не сделано правильно или возникло условие ошибки на вашем пути, ваш дескриптор окна не будет действителен. – WhozCraig
Я попытался добавить код, как было предложено, но IsWindow вернул 1, указав, что дескриптор окна идентифицирует существующее окно [см. функцию microsoft.com: IsWindow()] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633528%28v=vs.85%29.aspx). – Mmarss