- ベストアンサー
リストビューのハンドルについて
- リストビューコントロールのハンドルについて疑問に思う事がありまして、ご教授よろしくおねがいします。
- 通常リストビューをCreateWindow()で作成した時に戻り値として受け取るウィンドウハンドルに対してSetWindowFont()を行うとリストビュー全体のフォントが変更されます。
- リストビュー関数にはListView_GetHeader( リストビューハンドル );という関数が用意されていてリストビューのカラム部分のハンドルを取得できます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス ちょっと説明不十分でしたね。 前回の構造はリスト部の子ウインドウとしてヘッダ部のウインドウが存在する図です。 ですから親ウインドウ(リスト部)にフォントを設定すると子ウインドウ(ヘッダ部)も 一緒に変更されるのではないでしょうか。 ・それで直接子ウインドウ(ヘッダ部)のウインドウ・ハンドルを取得してフォントの 変更をするとヘッダ部のみが変更されリスト部(親ウインドウ)には影響がないものと 思います。 ・またヘッダ部はオプション(スタイル)で非表示に出来ますが、リスト部だけを非表示 には出来ません。つまりリストビューのハンドルに対して非表示にするとヘッダ部も 一緒に非表示になります。これは親ウインドウ(リスト部)が非表示になるとその子の ウインドウも一緒に非表示になるわけです。フォントの設定も同じ考えでしょう。 >この事からリスト部分だけのウィンドウハンドルが存在するのではと思いました。 >リスト部分だけのウィンドウハンドルは存在するのでしょうか? 親…リスト部のウインドウ・ハンドル(リストビュー) 子…ヘッダ部のウインドウ・ハンドル このような構造で2つに分かれています。 決して独立して2つのウインドウがあるわけではないのです。 ※親子関係として2つのウインドウがあるのです。
その他の回答 (2)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス >リスト部のウィンドウハンドル これは通常リストビューを CreateWindow() で作成した時に戻り値として 受け取るウィンドウ・ハンドルです。 構造: リストビューのウィンドウ・ハンドル(リスト部) └ヘッダ部のウィンドウ・ハンドル(ListView_GetHeaderで取得)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス ・無理です。 理由は簡単でリストビューはヘッダ部とリスト部の2つの構造で作られています。 この2つはそれぞれ別々のウインドウ・ハンドルを持っていますが アイテム部分の1つにウインドウ・ハンドルが存在するわけではありません。 ですから個別のアイテムに対して SetWindowFont() 関数でフォントを変更できません。 ・個別のアイテムに対してフォントを変更するにはオーナードローするしかありません。 オーナードローするときに1つのアイテムにつきフォント・ハンドルをlParamに セットして描画時にlParamよりフォント・ハンドルを取り出すような工夫が必要です。
お礼
Oh-Orange様ご回答ありがとうございます。 なるほどリストビューはヘッダ部とリスト部に分かれていたのですね。 という事は、 ・ヘッダ部のウィンドウハンドルは ... ListView_GetHeader( リストビューハンドル );で取得。 ・リスト部のウィンドウハンドルの取得方法はありでしょうか? ご教授よろしくお願いいたします。
お礼
ご回答ありがとうございます。 なるほどCreateWindow()の戻り値でリスト部分のウィンドウハンドルだと私も色々調べて思いました。 しかし疑問が残ります。 ・HWND hList = CreateWindow()の戻り値がリスト部分のウィンドウハンドルだとすればSetWindowFont()でhListを指定してフォントを設定した時にヘッダ部分にはフォントが設定されないはずです。しかしヘッダ部分にも同じフォントが設定されてしまいます。 ・ListView_GetHeader()で取得したヘッダ部分のウィンドウハンドルにSetWindowFont()を行うとヘッダ部分だけフォントが指定されます。 この事からリスト部分だけのウィンドウハンドルが存在するのではと思いました。リスト部分だけのウィンドウハンドルは存在するのでしょうか? ご教授よろしくお願いいたします。