CTreeCtrlのアイテムの背景色について – プログラミング – Home

CTreeCtrlのアイテムの背景色に...
 
通知
すべてクリア

[解決済] CTreeCtrlのアイテムの背景色について


ひろ
 ひろ
(@ひろ)
ゲスト
結合: 25年前
投稿: 149
Topic starter  

いつも参考にさせていただいております
ひろと申します。

CTreeCtrlをカスタマイズしていて行き詰まってしまいましたので
質問させてください。

下記のように16×16のビットマップを読み込みます。

●クラス
class CFooTreeCtrl : public CTreeCtrl
{

CImageList m_ImageList;

};

●初期化処理にて

CBitmap cBmp;
cBmp.LoadBitmap(IDB_xxx);
m_ImageList.Create(16,16,ILC_COLORDDB,0,0);
m_ImageList.Add(&cBmp, (CBitmap*)NULL);
SetImageList(&m_ImageList, TVSIL_NORMAL);

ツリーは全行選択にしています。
ビットマップから読み込んだアイテムのイメージは、16×16の正四角形ではないので、
背景色を決めてマスクをかけ、選択されてハイライトになる時に、
アイテム全体がハイライトにならなくしたいと考えておりますが
うまくできません。

環境は Win2k、VC++6.0、MFC4.2 です。

よろしくお願い致します。


引用未解決
トピックタグ
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

どのようにうまくいかないのか良く分からないのですが、おかしい所は下記のようになると思い
ます。

CImageList::Create()の最後の引数0ですが、MSDNによると

システムが新しいイメージを格納するためにリストのサイズを変更する必要があるとき、イメー
ジリストを拡張できるイメージ数。

となっているので、最低でも1にしないといけないのでは?と思います。
0でも良かった場合はごめんなさい。

で、CImageList::Add()では両方CBitmapのポインタを指定しようとしていますので、第2引数
もマスクするビットマップを指定してあげないといけないと思います。

下記のようにすればOKだと思います。

// マスクイメージも指定するのでILC_MASKも追加
m_ImageList.Create( 16, 16, ILC_MASK | ILC_COLORDDB, 0, 1 );

CBitmap bmTemp1, bmTemp2;
bmTemp1.LoadBitmap( アイコン用BMP );
bmTemp2.LoadBitmap( マスク用BMP );
m_ImageList.Add( &bmTemp1, &bmTemp2 );

マスク用ビットマップは透過させたい部分を0xFFFFFFFFに、その他を0x00000000で作成すると
良いです。


返信引用
ひろ
 ひろ
(@ひろ)
ゲスト
結合: 25年前
投稿: 149
Topic starter  

ひろぴー様、ご回答ありがとうございます。

ILC_MASKを設定したら無事解決いたしました。

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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