PSN_QUERYCANCEL不关闭属性表

PSN_QUERYCANCEL does not close Property Sheet

本文关键字:属性 QUERYCANCEL PSN      更新时间:2023-10-16

我创建了一个属性表,每个选项卡页共享相同的pfnDlgProc。在pfnDlgProc中,我有这个代码:

switch (msg) {
    case WM_NOTIFY:
        nmhdr = (NMHDR*)lParam;
        switch (nmhdr->code) {
            case PSN_QUERYCANCEL:
                printf("PSN_QUERYCANCELn");
                SetWindowLong(nmhdr->hwndFrom, DWL_MSGRESULT, FALSE);
                return TRUE;
        }
        break;
    ...
}

当我点击属性表上的取消按钮时,打印PSN_QUERYCANCEL,但属性表没有关闭。为什么会这样?我还需要做些什么来让它关闭吗?我知道我可以将DestroyWindow(nmhdr->hwndFrom)添加到处理程序,但这是正确的方法吗?

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