PSN_QUERYCANCEL不会关闭Property Sheet

时间:2011-08-16 18:11:04

标签: c++ c winapi propertysheet

我有一个我创建的属性表,每个标签页共享相同的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)添加到处理程序中,但这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

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