2008年07月20日

【C++系】Combobox、意外とめんどい

3連休、ひたすらコードと格闘する
なんかフリーの受け入れ先が減ってるみたいなので、ちっとでも「私は使える人間ですよ」というのを示せるものを書いておかないと、下手すると「正社員になる」とかいう現状では不本意な選択をしないといけなくなりそうなので。

安定した職種から逃げて不安定な職種を望むといのも、いとおかし。そして不安定の方がハードル高いのも、またおかし。

個人的に、不安定な立場の方がぬくぬくしなくて済むから生きやすかったりします。今も「再来月の仕事どうしよう」って、キリキリしてる。それが心地よい。

はい、後ろに崖がないと戦えないダメ人間です。別の言い方をすると、ドM?


昨日はウィンドウメッセージフックして云々をやっていました。で、今日はComboboxで、Editのところに入力できて、且つ、▼押すとリストが開くヤツを実装しようとする。

あっさり作れると思っていたのに、意外と面倒。

Editの部分に入力できるタイプだと、CBS_DROPDOWNを指定する。
ただ、これだと▼押してもリストが開かない。何のためにボタン出しとんねん、と一言ツッコミを入れてみる。ディスプレイに向けて。


で、選択肢としては、自前でCB_SHOWDROPDOWNする処理を書くか、CBS_DROPDOWNLISTを使用して、EditBoxの部分をサブクラス化して自前で書くか。IEのアドレスバーは後者で実装してるし、そっちが正しいのだろうけど、面倒だったので前者で実装してしまう。


▼が押された判定は、コンボボックス上でLBUTTONDOWNされた際に、CONBOBOXINFOを取ってきて、rcButtonのRECT内に入っているかを確認するという、やや(かなり?)強引な処理をしてみる

CONBOBOXINFOでボタンのHWNDも取れればいいのに。というか、コンボボックスのボタンのウィンドウハンドルって、どうやって取るのだろう。軽く調べたけど、見つからなかったのであっさり諦めた。


//追記。COMBOBOXINFOの取り方。
COMBOBOXINFO info;
SendMessage ( CB_GETCOMBOBOXINFO, 0, (LPARAM)&info );
//これだと動かない

//こう書く
COMBOBOXINFO info = { sizeof( COMBOBOXINFO ) };
SendMessage ( CB_GETCOMBOBOXINFO, 0, (LPARAM)&info );
posted by MW at 23:41| Comment(0) | TrackBack(0) | C++ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。