2011-08-16 34 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

我試過兩種方式,它不會以任何方式工作。 –