• 締切済み

コンボボックスのエディットでキー操作するには

コンボボックスのメンバコントロール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な為できません。 コンボボックスのエディット入力キーメッセージが上位ウィンドウに送られて来ることはないんでしょうか? コンボボックスでキーが押されたときに実行されるオーバーライド可能な関数はないのでしょうか? どうすればいいのか教えてください。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

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" );       }     }   } } といった具合で行えばいいのではないかと思います

_jast
質問者

補足

ありがとうございます。 エンターキーを押した時、親にWM_KEYDOWNが届きません。 これはコンボボックスで、VK_RETURNをスルーさせているからなのでしょうか? これを書き換える方法はありませんか?

関連するQ&A