• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:リストビューのハンドルについて)

リストビューのハンドルについて

このQ&Aのポイント
  • リストビューコントロールのハンドルについて疑問に思う事がありまして、ご教授よろしくおねがいします。
  • 通常リストビューをCreateWindow()で作成した時に戻り値として受け取るウィンドウハンドルに対してSetWindowFont()を行うとリストビュー全体のフォントが変更されます。
  • リストビュー関数にはListView_GetHeader( リストビューハンドル );という関数が用意されていてリストビューのカラム部分のハンドルを取得できます。

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★アドバイス  ちょっと説明不十分でしたね。  前回の構造はリスト部の子ウインドウとしてヘッダ部のウインドウが存在する図です。  ですから親ウインドウ(リスト部)にフォントを設定すると子ウインドウ(ヘッダ部)も  一緒に変更されるのではないでしょうか。 ・それで直接子ウインドウ(ヘッダ部)のウインドウ・ハンドルを取得してフォントの  変更をするとヘッダ部のみが変更されリスト部(親ウインドウ)には影響がないものと  思います。 ・またヘッダ部はオプション(スタイル)で非表示に出来ますが、リスト部だけを非表示  には出来ません。つまりリストビューのハンドルに対して非表示にするとヘッダ部も  一緒に非表示になります。これは親ウインドウ(リスト部)が非表示になるとその子の  ウインドウも一緒に非表示になるわけです。フォントの設定も同じ考えでしょう。 >この事からリスト部分だけのウィンドウハンドルが存在するのではと思いました。 >リスト部分だけのウィンドウハンドルは存在するのでしょうか?  親…リスト部のウインドウ・ハンドル(リストビュー)  子…ヘッダ部のウインドウ・ハンドル  このような構造で2つに分かれています。  決して独立して2つのウインドウがあるわけではないのです。  ※親子関係として2つのウインドウがあるのです。

その他の回答 (2)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★アドバイス >リスト部のウィンドウハンドル  これは通常リストビューを CreateWindow() で作成した時に戻り値として  受け取るウィンドウ・ハンドルです。 構造: リストビューのウィンドウ・ハンドル(リスト部) └ヘッダ部のウィンドウ・ハンドル(ListView_GetHeaderで取得)

Daisuke-now
質問者

お礼

ご回答ありがとうございます。 なるほどCreateWindow()の戻り値でリスト部分のウィンドウハンドルだと私も色々調べて思いました。 しかし疑問が残ります。 ・HWND hList = CreateWindow()の戻り値がリスト部分のウィンドウハンドルだとすればSetWindowFont()でhListを指定してフォントを設定した時にヘッダ部分にはフォントが設定されないはずです。しかしヘッダ部分にも同じフォントが設定されてしまいます。 ・ListView_GetHeader()で取得したヘッダ部分のウィンドウハンドルにSetWindowFont()を行うとヘッダ部分だけフォントが指定されます。 この事からリスト部分だけのウィンドウハンドルが存在するのではと思いました。リスト部分だけのウィンドウハンドルは存在するのでしょうか? ご教授よろしくお願いいたします。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★アドバイス ・無理です。  理由は簡単でリストビューはヘッダ部とリスト部の2つの構造で作られています。  この2つはそれぞれ別々のウインドウ・ハンドルを持っていますが  アイテム部分の1つにウインドウ・ハンドルが存在するわけではありません。  ですから個別のアイテムに対して SetWindowFont() 関数でフォントを変更できません。 ・個別のアイテムに対してフォントを変更するにはオーナードローするしかありません。  オーナードローするときに1つのアイテムにつきフォント・ハンドルをlParamに  セットして描画時にlParamよりフォント・ハンドルを取り出すような工夫が必要です。

Daisuke-now
質問者

お礼

Oh-Orange様ご回答ありがとうございます。 なるほどリストビューはヘッダ部とリスト部に分かれていたのですね。 という事は、  ・ヘッダ部のウィンドウハンドルは ... ListView_GetHeader( リストビューハンドル );で取得。  ・リスト部のウィンドウハンドルの取得方法はありでしょうか? ご教授よろしくお願いいたします。

関連するQ&A

専門家に質問してみよう