c++ - 为对话框创建窗口类

标签 c++ winapi dialog wndproc

我为对话框窗口创建了一个带有静态窗口过程的窗口类,并且在创建窗口时执行了一个错误:写入位置“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));

    // ...
}

最佳答案

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

关于c++ - 为对话框创建窗口类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21658656/

相关文章:

c++ - 我们可以从单个线程多次调用 WaitForSingleObject 以获得 Mutex

Javascript:关闭模态且焦点不返回屏幕

dialog - Electron:文件对话框窗口应聚焦直到做出决定

c++ - 在 C++ 中设置变量值之前检查变量是否更好?

c++ - Long 变量到 char 数组

windows - 以编程方式为 USB 设备安装 "Incompatible"驱动程序

C#/ native : Reading HDD Serial Using SCSI PassThrough

java - 如何仅使顶部窗口处于 Activity/可点击状态?

c++ - Visual Studio 2010 的 apache hadoop 源代码中的 "Error: expected a declaration"

c++ - 如何使用 'clang-win' 工具集构建调试 boost 静态库?