为Dialog创建窗口类

时间:2014-02-09 11:45:40

标签: c++ winapi dialog wndproc

我创建了一个窗口类,其中包含用于对话框窗口的静态窗口proc,并且在创建窗口时执行了错误:写入位置时访问被拒绝" 0x00000000"

// ... 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));

    // ...
}

1 个答案:

答案 0 :(得分:4)

对话框的“第一条消息”是WM_INITDIALOG而不是WM_NCCREATE。用户数据参数直接作为lParam值传递(而不是通过LPCREATESTRUCT指向的lParam传递。