Windows7
Win32API
MinGW g++
C++11使用
以下のような手順でコンボボックスを作成したのですが、
combobox = ::CreateWindowEx (
WS_EX_LEFT | WS_EX_ACCEPTFILES,
"COMBOBOX",
"",
WS_CHILD | WS_VISIBLE | CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_HASSTRINGS | CBS_NOINTEGRALHEIGHT,
700,
500,
100,
500,
hWnd,
( HMENU ) g_id++,
g_hInst,
nullptr
) ;
for ( auto &elem : { "qwe", "rty", "uio", "p@" } )
{
::SendMessage ( combobox, CB_ADDSTRING, 0, ( ::LPARAM ) elem.c_str () ) ;
}
※実際はクラスにまとめていますが展開しました。。
クリックでリストをドロップさせることは出来たのですが、リストをクリックしても、選択されずにフリーズしたような状態になってしまいます。WM_COMMANDメッセージも受け取りません。
しかし、付属のエディットボックスに入力することは出来ます。このばあいはWM_COMMANDメッセージを受け取ります。
また、十字キーを用いると問題なく選択できます。
この状態になると、コンボボックスのあるウインドウ全体のマウス関連のイベントがまったく発生しなくなり(メニューも開けない)ますが、タイマーイベントは受け取っています。(完全にフリーズしているわけではない)
ウインドウを非アクティブウインドウにする(ほかのウインドウをクリック)するか、クリックを5回くらい連打すると元に戻りますが選択できていません。
また、CBS_DROPDOWNではなくCBS_SIMPLEを指定すると問題なく選択できます。
ほかのコントロール(BUTTON,STATIC,LISTBOX,EDIT)は正常に動作しています。
どうすればマウスで選択できるようになるのでしょうか。
どなたかご教授よろしくお願いします。
コンボボックスのリストをクリックできない
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: コンボボックスのリストをクリックできない
for ( auto &elem : { "qwe", "rty", "uio", "p@" } )
をやめて定数にしたら動くとか無いですか? 生存期間が心配です。
SendMessage()だから大丈夫な気もするんですが自信がありません。
見当違いなら申し訳ないです。
をやめて定数にしたら動くとか無いですか? 生存期間が心配です。
SendMessage()だから大丈夫な気もするんですが自信がありません。
見当違いなら申し訳ないです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
どらごん
Re: コンボボックスのリストをクリックできない
定数にしてもだめでした。それに普通のリストボックスはちゃんと動いていますし。
あとアクセラレーターキーも動いてないことに気づきました。
でかいけどクラスの定義とかも乗せたほうがいいでしょうか?
あとアクセラレーターキーも動いてないことに気づきました。
でかいけどクラスの定義とかも乗せたほうがいいでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: コンボボックスのリストをクリックできない
全部を上げてもらっても再現できる保証もないので(環境を合わせるのも一苦労しそうです)。
別プロジェクトでコンボボックスだけのウィンドウを作っても症状は同じでしょうか?
→ 原因がWindowsAPIなのか、他の影響を受けているのか切り分けられるのでは?と言う提案です。
【追記】
CBS_HASSTRINGS ってオーナー描画用ですが外してはどうでしょうか?
別プロジェクトでコンボボックスだけのウィンドウを作っても症状は同じでしょうか?
→ 原因がWindowsAPIなのか、他の影響を受けているのか切り分けられるのでは?と言う提案です。
【追記】
CBS_HASSTRINGS ってオーナー描画用ですが外してはどうでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
どらごん
Re: コンボボックスのリストをクリックできない
いろいろ試していたら原因がわかりました。
GetMessage の第2引数に ウインドウハンドルを渡していたのが原因だったようです。
nullptrを指定すると正常に動きました。
TranslateAcceleratorを追加するときに誤って一緒に書き換えてしまったようです。
解決にしておきます。お騒がせしました。ありがとうございました。
GetMessage の第2引数に ウインドウハンドルを渡していたのが原因だったようです。
nullptrを指定すると正常に動きました。
TranslateAcceleratorを追加するときに誤って一緒に書き換えてしまったようです。
解決にしておきます。お騒がせしました。ありがとうございました。