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 に答える