2014-02-09 3 views
1

создать класс окна со статическим оконную процедуру для диалогового окна и, когда окно создания ошибки выполняется: Отказано в доступе при записи местоположения «0x00000000»Создание класса окна для Dialog

// ... Creating window 
_hWnd = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_MAIN), NULL, WndProc, (LPARAM)this); 

И окно ргос функции:

static INT_PTR CALLBACK MainWindow::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    MainWindow * wnd = NULL; 

    if(message == WM_NCCREATE) { 

     wnd = reinterpret_cast<MainWindow *>(((LPCREATESTRUCT)lParam)->lpCreateParams); 
     ::SetWindowLongPtr(hWnd, GWLP_USERDATA, reinterpret_cast<long>(wnd)); 
     wnd->_hWnd = hWnd; 

    } else 
     wnd = reinterpret_cast<MainWindow *>(::GetWindowLongPtr(hWnd, GWLP_USERDATA)); 

    // ... 
} 

ответ

3

«первое сообщение» диалоговое окно является WM_INITDIALOG, а не WM_NCCREATE. Параметр пользовательских данных передается непосредственно как значение lParam (а не через LPCREATESTRUCT, на которое указывает lParam).

+0

Спасибо, он работает! – Slinner

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