PostMessage を使用して、CDialog コントロールのフォーカスを CFormView から変更しようとしています。
[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 メソッドは、ユーザーが (ダイアログから) Return キーを押すたびにフォーカスを適切に変更することに気付きました。しかし、これは別のダイアログでは達成できませんでした。
その背後にある理由、またはヒントや回避策を知っている人はいますか?
ありがとう。
編集:
これは、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