2011-08-16 7 views
2

私が作成したプロパティシートがあり、各タブページは同じpfnDlgProcを共有しています。 pfnDlgProcでは、私はこのコードを持っている:私は私のプロパティシートで[キャンセル]ボタンをクリックするとPSN_QUERYCANCELはプロパティシートを閉じません

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)をハンドラに追加することができますが、それを行う適切な方法ですか?

答えて

0

通知を送信したウィンドウハンドルにDWL_MSGRESULTを設定していますが、必ずしもWM_NOTIFYを処理しているダイアログウィンドウではありません。 nmhdr-> hwndFromウィンドウハンドルを使用する代わりに、pfnDlgProcに渡されるHWNDを使用してみてください。

+0

私は両方の方法で試してみましたが、どちらの方法でも動作しません。 –