CListCtrlでのアイコン表示の変更 – プログラミング – Home

CListCtrlでのアイコン表示の変...
 
通知
すべてクリア

[解決済] CListCtrlでのアイコン表示の変更


みな
 みな
(@みな)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

CListCtrlでCImageListを使用してアイテムにアイコンを表示しています。
(レポート形式でアイコンは16x16のみ使用です)

このアイコンを任意のタイミング(ボタンを押された時など)で指定の
行だけ変更したいのですが,どのようにすれば良いでしょうか?

ヘルプにもテキストを変更する関数はあってもイメージを変更するものは
見あたりません。
「コールバック項目」という機能を使用するのかと思いましたが,これの
使用方法はヘルプには載っていません。

もし,できないのであれば
「変更する行を削除」→「アイコンを変更して追加」
と,ならざるをえないのでしょうか?

もし,アイコンの変更の仕方をご存じの方がおられたらご教授願います。
よろしくお願いします。


引用未解決
トピックタグ
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

CListCtrl::SetItemを使用すれば良いのでは・・


返信引用
みな
 みな
(@みな)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

実は,CListCtrl::SetItemは使用したのですが,アイコンは変更できませんでした。
SetItem実施後にUpdateが必要かとも思い行ったのですが,やはり結果はダメでした。

SetItemを使用する上で注意点などがあるのでしょうか?
ご存じの方がいらしたらよろしくお願いします。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

試しましたが出来ましたよ・・
・LVIF_IMAGEをマスクに指定していますか?
・nImageにイメージのインデックスを指定していますか?


返信引用
みな
 みな
(@みな)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

できました!!
「nImage」とあったので,ひょっとしてと思いSetItemの各パラメータを引数で
実行するタイプのものを使用したところアイコンの変更ができました。

『不良PG』様,本当にありがとうございました。

ただ,引数に LVITEM構造体を指定するタイプのものは相変わらずできません。
たとえば,アイテムインデックス=5のアイコンをイメージ0→1にする処理で
以下のようにしたのですが。。。

LVITEM listitem;
listitem.iItem = 5;
m_listView.GetItem(&listitem); // 念のため現情報を取得
listitem.mask = LVIF_TEXT | LVIF_IMAGE;
listitem.iSubItem = 0;
listitem.iImage = 1;      // イメージ変更
m_listView.SetItem(&listitem);

これではできませんでした。
できたら原因を知りたいのですがご教授願えないでしょうか。
よろしくお願いします。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

イメージを変更したいだけならば

LVITEM listitem;
listitem.iItem = 5;
listitem.mask = LVIF_IMAGE;
listitem.iSubItem = 0;
listitem.iImage = 1;      // イメージ変更
m_listView.SetItem(&listitem);

でOKです

maskメンバで指定された内容のみ設定されるので余計な情報は、要りません
(リストコントロール自体が保持している為)

>できたら原因を知りたいのですがご教授願えないでしょうか。

1.GetItemを呼ぶときにmaskメンバが指定してないために
GetItem関数が失敗(例外を起こす)してpszTextにゴミ(初期化してない値)が入る。
2.SetItem関数でmaskメンバにLVIF_TEXTを指定しているのにpszTextにゴミが入っているから
関数が失敗する。

結局、二つの関数が共に失敗して動作しません。


返信引用
みな
 みな
(@みな)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

あぁ。なるほど。
maskの使用方法がまずかった訳ですね。
大変勉強になりました。

『不良PG』様,色々と教えていただきありがとうございました。
お手数をかけて申し訳ありませんでした。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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