[kaze's test] プログラミングメモ →目次


編集中のコンボボックスエディットのキーイベント

 編集中のコンボボックスエディットのキーイベントをチャッチする方法のメモです。

 エディットがコンボボックスの一番目の子ウィンドウですので、コンボボックスの派生クラスからGetWindow(GW_CHILD)で、エディットのCWndポインターを取得できます。
 さらに、PreTranslateMessage(MSG* pMsg)をオーバーライドし、 pMsg->messageがWM_KEYDOWNになり、且つ、pMsg->hwndがエディットのHWNDになった時は、エディットのキー操作です。。 

例として、リターンキー(Enter)が押されたときに、エディットの内容をTRACEします:

// CComboBoxTest メッセージ ハンドラー
BOOL CComboBoxTest::PreTranslateMessage(MSG* pMsg)
{
    // TODO: ここに特定なコードを追加するか、もしくは基本クラスを呼び出してください。
    if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
    {
        CWnd* pWnd = GetWindow(GW_CHILD);
        if (pMsg->hwnd == pWnd->m_hWnd)
        {
            CString strText;
            GetWindowText(strText);
            TRACE(_T("%s\n"), strText);
            return true;
        }
    }
    return CComboBox::PreTranslateMessage(pMsg);
}