【问题标题】:Creating window class for Dialog为 Dialog 创建窗口类
【发布时间】:2014-02-09 11:45:39
【问题描述】:

我为对话框窗口创建了一个带有静态窗口过程的窗口类,并在创建窗口时执行了一个错误:写入位置“0x00000000”时访问被拒绝

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

和window proc函数:

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

    // ...
}

【问题讨论】:

    标签: c++ winapi dialog wndproc


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 2011-06-30
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多