[英]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.