• 締切済み

コンボボックスについて

コンボボックスのドロップダウンとドロップダウンリストについて質問させてください。 現在eMbedded Visual C++ 4.0で開発を行っております。 キー処理を独自で行う為に、ディスパッチ前メッセージPreTranslateMessage()にてGetFocus()を行い、 コントロールIDテーブルのどのコントロールにフォーカスが当たっているかを判定しています。 処理は以下のようにしています。 // 現在のフォーカスインデックスを取得 int CKeyEventChange::GetFocusIndx(CWnd* pWnd, LONG* tblCtrlID) {   for(int nIndx = 0; ;nIndx++){      // 最後まで該当しない場合は検索終了      if(tblCtrlID[nIndx] == EOF) return 0;       (※)if(pWnd->GetFocus() == pWnd->GetDlgItem(tblCtrlID[nIndx])){       // 現在フォーカスのコントロールIDインデックス        break;      }     }   return nIndx; } そこで質問なのですが、コンボボックスのスタイルがドロップダウンの場合は(※)箇所の条件でヒットするのですが、ドロップダウンリストの場合はヒットしません。 ドロップダウンではなく、ドロップダウンリストを使用する必要があります。 何が解決策か分かる方いらっしゃいませんでしょうか? よろしくお願い致します。

みんなの回答

  • davidfox
  • ベストアンサー率58% (21/36)
回答No.1

eMbedded 版は知らないので 通常の Win32 と同じであると言う仮定で回答します。 ヒットしない理由としてはドロップダウンなリスト部が ComboBox の子ではない点で、これを捕まえるには、ちょっとコツが必要で WM_CTLCOLORLISTBOX しかチャンスが無かったように思います(変なタイミングですが)。 参考URL の 「コンボ ボックスのリスト ボックス部分をサブクラス化する方法は?」 はサブクラス化する例ですが、そのような方法でリスト ボックスのハンドルを捕まえておけばフォーカス判定が出来ると思います。

参考URL:
http://msdn.microsoft.com/ja-jp/library/cc403767%28v=vs.71%29.aspx

関連するQ&A