我正在尝试使用 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