簡體   English   中英

從另一個對話框更改CDialog控件的焦點

[英]Change CDialog controls focus from another dialog

我試圖通過使用PostMessage從CFormView更改CDialog控件的焦點:

[CHelpView繼承自CFormView。 m_wndDlg是一個CSampleDlg(從CDialog繼承)對象]

void CHelpView::OnEnterbutton() 
{
    pSplitterFrame->m_dlgPane->m_wndDlg->PostMessage(WM_KEYDOWN, 'r', 2); 
}

BOOL CSampleDlg::PreTranslateMessage(MSG* pMsg) 
{
    if (pMsg->message >= WM_KEYFIRST && // for performance
        pMsg->message <= WM_KEYLAST)
    { 
         if (pMsg->wParam=='r' && pMsg->lParam==2){
            NextDlgCtrl();
            return TRUE; 
         }
    }
}

對話框收到消息,但NextDlgCtrl方法不會更改焦點。 我意識到,如果我更改PreTranslateMessage方法,以便在對話框中按下Return鍵,則每次用戶單擊返回鍵(從對話框)時,此NextDlgCtrl方法都會正確更改焦點。 但是我無法通過另一個對話框來實現。

有誰知道背后的原因或任何提示或解決方法?

謝謝。

編輯:

這是來自SPY ++的對話框的日志文件(的一部分)。

<01128> 0016013E R WM_GETDLGCODE fuDlgCode:0000

<01129> 0016013E P WM_KEYDOWN nVirtKey:00726574 cRepeat:2 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:0 fUp:0

<01130> 0016013E S WM_NEXTDLGCTL wCtlFocus:(null)(下一個控件獲得焦點)fHandle:False

<01131> 0016013E R WM_NEXTDLGCTL

<01132> 0016013E S WM_GETDLGCODE

您要發布的lParam值為2 ,但是要檢查'2' 2'-它們不一樣!

嘗試

如果(pMsg-> wParam =='r'&& pMsg-> wParam == 2)

編輯 :rrirower的答案后實現:它當然應該是

if (pMsg->wParam == 'r' && pMsg->lParam == 2)

您所編寫的PreTranslateMessage處理程序將永遠無法工作。 這條線

if (pMsg->wParam=='r' && pMsg->wParam==2){
            NextDlgCtrl();
            return TRUE; 

永遠不可能是真的。 pMsg-> wParam如何同時等於兩個值? 我認為您打算檢查lParam?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM