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