2012-07-19 25 views
1

我有一個對話框,我需要在CPropertySheet和獨立對話框中顯示對話框。我選擇了沒有兩個單獨的類來避免代碼冗餘(我在這些對話框中進行了很多修改,並且必須不斷地同步兩個類會是地獄),而當我想將它顯示爲獨立對話框時,我只是調用CPropertyPage :: DoModal。這會導致一些問題,但我已經解決了其中的大部分問題。當顯示爲獨立對話框時,CPropertyPage派生的對話框不會在Esc上關閉

但是,有些仍然存在,即進入和esc不工作。同時按下標籤不會改變焦點。這讓我覺得CPropertyPage會吃掉所有的鍵盤輸入,或者試圖將它們傳遞給它的父項。

任何想法如何在獨立模式下覆蓋該行爲?

回答

0

我相信這會適合你。我沒有可以測試的對話框,所以我全部都是從內存中進行測試,但我相信您可以添加一個在您撥打DoModal時設置的布爾值,或者在調用DoModal之前將其設置爲屬性以表明它是運行作爲一個獨立的對話框,然後覆蓋PreTranslateMessage這樣的:

CMyPropertyPage::PreTranslateMessage(MSG* pMsg) 
{ 
    if (m_runningAsStandalone && pMsg->message == WM_KEYDOWN) 
    { 
     UINT key = pMsg->wParam; 
     switch(pMsg->wParam) 
     { 
      case VK_RETURN: 
       OnOK(); 
       return TRUE; 
      case VK_ESCAPE: 
       OnClose(); 
       return TRUE; 
     } 
    } 
    return CPropertyPage::PreTranslateMessage(pMsg); 
} 

您也可能會發現此鏈接有用http://support.microsoft.com/kb/125645

+0

當我看着'的CPropertyPage :: PreTranslateMessage'的源代碼,事實證明它只是調用'CWnd :: PreTranslateMessage'。所以我試着調用'CDialog :: PreTranslateMessage',奇蹟般地開始工作,包括tab鍵和所有東西。 – sashoalm 2012-07-19 15:43:46

相關問題