2

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

4

1 回答 1

0

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

于 2011-09-14T21:26:24.437 回答