- 締切済み
コンボボックスのエディットでキー操作するには
コンボボックスのメンバコントロールCEditでエンターを押した時、 何か処理をさせたい場合はどうすればいいのでしょうか? class CEditEX :public CEdit{ virtual BOOL PreTranslateMessage(MSG* pMsg){ if( (pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_RETURN) ){ TRACE("TEST\n");} return 0;} } }; CComboBox m_ComboBox; CEditEX m_EditEX; m_ComboBox.m_pWndEdit = m_EditEX; こうしたいのですが、pWndEdit がprotectedな為できません。 コンボボックスのエディット入力キーメッセージが上位ウィンドウに送られて来ることはないんでしょうか? コンボボックスでキーが押されたときに実行されるオーバーライド可能な関数はないのでしょうか? どうすればいいのか教えてください。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
m_ComboBoxの子コントロールのエディットボックスは CWnd* pWnd = NULL; pWnd = m_ComboBox.GetWindow( GW_CHILD ); または CRect rc; m_ComboBox.GetClientRect( &rc ); pWnd = m_ComboBox.ChildWindowFromPoint( rc.CenterPoint() ); といった具合で取得できます これを使って コンボボックスの親のPreTranslateMessageで if ( pWnd != NULL ) { if ( pMsg->message == WM_KEYDOWN ) { if ( pMsg->hwnd = pWnd->m_hWnd ) { if ( pMsg->wParam == VK_RETURN ) { TRACE( "TEST\n" ); } } } } といった具合で行えばいいのではないかと思います
補足
ありがとうございます。 エンターキーを押した時、親にWM_KEYDOWNが届きません。 これはコンボボックスで、VK_RETURNをスルーさせているからなのでしょうか? これを書き換える方法はありませんか?