リストビューで一行だけ高さを変更する方法について – プログラミング – Home

リストビューで一行だけ高さを変更する方...
 
通知
すべてクリア

リストビューで一行だけ高さを変更する方法について


マイク
 マイク
(@マイク)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

現在、ダイアログにCListCtrlを貼り付けています。そして、
OnMeasureItemをオーバーライドしています。

OnMeasureItem()でlpMeasureItemStruct->itemHeightに
値を入れると高さは変わります。

ある1行の高さだけを変更したいのですが、どうすればよいのでしょうか?
ご教授よろしくお願いします。


引用解決済
トピックタグ
マイク
 マイク
(@マイク)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

開発環境は、WindowsXP Visual C++ 6.0 MFCです。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

ご参考までに。
MEASUREITEMSTRUCTには、コントロールIDとItemIDが入ってくると思うのですが、
これを見て判別できないのでしょうか?
ItemIDからそのデータに該当する情報をチェックして結果によってitemHeightに設定する
値を変えれば出来そうな気がするのですが。
コードの検証までは行っていませんのでご自分で検証してみてください。


返信引用
マイク
 マイク
(@マイク)
ゲスト
結合: 22年前
投稿: 6
Topic starter  

ご返事ありがとうございます。

コントロールIDとItemIDを調べたのですが、ItemIDは0でコンボボックスとかのように
何項目というように値が入ってきません。

リストビューでは無理なのでしょうか?

よろしくお願いします。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

リストボックスと勘違いしてました。
リストコントロールの場合は、レポート形式外の表示形態もあるので
コンボボックスのように何番目という識別の仕方はしないのでした。
リストコントロールの場合はアイテムハンドルで識別してますね。
HELPの読み直したんですが、

オーナー描画のボタン、コンボ ボックス、リスト ボックス、
またはメニュー項目のコントロールが作成された場合に、
そのコントロールのオーナーに対して、フレームワークから
このメンバ関数が呼び出されます。
リスト ボックスやコンボ ボックスが LBS_OWNERDRAWVARIABLE
または CBS_OWNERDRAWVARIABLE スタイルで作成されているときは、
コントロールの各項目のオーナーに対して、
フレームワークからこの関数が呼び出されます。
それ以外のときは、この関数は一度だけ呼び出されます。

とありますのでリストコントロールのときは一回だけしか呼び出されて
いないのではないですか?
もしそうなら、このアプローチでは無理だと思います。
複数回呼び出されているのであれば、構造体内のほかのメンバーで
どの項目に対して呼び出しているかを判断できないかデバッガで
確認してみてはどうでしょう。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました