2014-12-23 2 views
0

Следующий код возвращает 0 до wnd, но сразу после CreateDialog ошибка ERROR_SUCCESS. Диалог не отображается, и я не понимаю, как это возможно. Это консольный проект, и диалог создается в vs2013, если это актуально.CreateDialog возвращает 0, но получает ERROR_SUCCESS

#include <windows.h> 
#include "resource.h" 

int main(){ 
    HWND wnd = CreateDialog(NULL, MAKEINTRESOURCE(IDD_DIALOG1), NULL, NULL); 
    ShowWindow(wnd, SW_SHOWDEFAULT); 
    UpdateWindow(wnd); 
    MSG msg; 
    while(GetMessage(&msg, NULL, 0, 0)){ 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 
} 

Это должно быть какая-то действительно глупая ошибка, но я не вижу ее.

+0

Есть ли в диалоге какие-либо элементы управления? –

+0

@JonathanPotter Да, у него есть 3, OK, CANCEL и поле редактирования RichEdit20A. – simonzack

+0

Сначала вам нужно инициализировать библиотеку расширенного редактирования - см. Примечание по адресу http://msdn.microsoft.com/en-us/library/windows/desktop/hh298375(v=vs.85).aspx о вызове ' LoadLibrary'. Альтернативно, установка стиля DS_NOFAILCREATE должна позволять создавать диалог, хотя расширенный элемент управления редактирования не будет отображаться. –

ответ

5

Сначала вам нужно инициализировать библиотеку расширенного редактирования - если библиотека не загружена, элемент управления не будет зарегистрирован и создание диалога не будет выполнено.

См. Примечание к http://msdn.microsoft.com/en-us/library/windows/desktop/hh298375(v=vs.85).aspx о звонке LoadLibrary. Вам нужно сделать это, прежде чем создавать диалог.

В качестве альтернативы установка стиля DS_NOFAILCREATE должна позволять создавать диалог, хотя расширенный элемент управления редактирования не будет отображаться.

+0

Есть ли способ обнаружить во время выполнения, что это была ошибка? –

+0

@MattMcNabb: Я бы ожидал, что 'GetLastError' вернет' ERROR_CANNOT_FIND_WND_CLASS' - если это не так, возможно, нет. –

Смежные вопросы