teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

リストボックス項目の高さを変えられている、と判断した根拠を関連箇所へ追記

2019/09/27 16:52

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -80,6 +80,9 @@
80
80
  ```
81
81
 
82
82
  これで分かるように、初回の`DrawItem`呼び出しでItem[1]のときに高さが変わっています。あくまで私の頼りない推測ですが、`CCheckListBox`の実装でチェックボックスの存在などを加味した高さの計算とセットがなされてしまうようです。
83
+ **>>>>追記 2019/09/28 01:51**
84
+ 尚、コード例は示しませんが、`OnInitDialog`内での`AddString`実行直後に`CDC::GetTextExtent`で高さを確認すると全ての項目で高さ18であったものが、初回の描画、Item[1]以降で14になってしまったことから「高さを変えられている」と判断しました。
85
+ **<<<<追記ここまで**
83
86
 
84
87
  そこで、対処として`SubclassDlgItem`~`AddString`の実行後にあえて明示的に`CListBox::SetItemHeight`でItem[0]の高さを指定してみました。
85
88
  リストボックスのスタイルは`LBS_OWNERDRAWFIXED`なので、ひとつセットすれば他の項目も同じになるだろう、との意図です。

1

抜けを追記

2019/09/27 16:52

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -81,7 +81,7 @@
81
81
 
82
82
  これで分かるように、初回の`DrawItem`呼び出しでItem[1]のときに高さが変わっています。あくまで私の頼りない推測ですが、`CCheckListBox`の実装でチェックボックスの存在などを加味した高さの計算とセットがなされてしまうようです。
83
83
 
84
- そこで、対処として`SubclassDlgItem`の実行後にあえて明示的に``CListBox::SetItemHeight`でItem[0]の高さを指定してみました。
84
+ そこで、対処として`SubclassDlgItem`~`AddString`の実行後にあえて明示的に`CListBox::SetItemHeight`でItem[0]の高さを指定してみました。
85
85
  リストボックスのスタイルは`LBS_OWNERDRAWFIXED`なので、ひとつセットすれば他の項目も同じになるだろう、との意図です。
86
86
  一応、これで最初の描画から固定の高さになることは確認できました。
87
87