我有一个已创建的属性表,并且每个选项卡页面都共享相同的pfnDlgProc。在pfnDlgProc中,我有以下代码:

switch (msg) {
    case WM_NOTIFY:
        nmhdr = (NMHDR*)lParam;

        switch (nmhdr->code) {
            case PSN_QUERYCANCEL:
                printf("PSN_QUERYCANCEL\n");
                SetWindowLong(nmhdr->hwndFrom, DWL_MSGRESULT, FALSE);

                return TRUE;
        }

        break;

    ...
}

当我单击属性表上的“取消”按钮时,会打印PSN_QUERYCANCEL,但属性表不会关闭。为什么是这样?我还需要做其他事情以使其关闭/使其关闭吗?我知道我可以将DestroyWindow(nmhdr->hwndFrom)添加到处理程序中,但这是正确的方法吗?

最佳答案

您正在将DWL_MSGRESULT设置为向您发送通知的窗口句柄,但不一定是要为其处理WM_NOTIFY的对话框的窗口。代替使用nmhdr-> hwndFrom窗口句柄,请尝试使用传递给pfnDlgProc的HWND。

关于c++ - PSN_QUERYCANCEL无法关闭属性表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7082915/

10-13 06:06