背景色の反映 – プログラミング – Home

通知
すべてクリア

[解決済] 背景色の反映


初心者@rumu
 初心者@rumu
(@初心者@rumu)
ゲスト
結合: 23年前
投稿: 30
Topic starter  

前回はお世話になりました。
また、お聞きしたいことが・・・。

メイン画面に左ツリービューと右リストビューを載せていて、それぞれの背景色を変え
たのですが、ともにアイコン周りや文字周りといった部分のみが変わらず、マンダラで
みっともない状態となっています。
一応、

http://www.expertmg.co.jp/html/cti/vctips/control.htm#TreeViewコントロールの背
景色を変える・その1

などを参考にして、きれいに背景色を変えれるように試みたのですが、ダメでした。何
かいい方法はないでしょうか。よろしくお願いします。

環境→WinXP
VC++.NET
SDK


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

参考にしたホームページで文字の背景色を変えているところがありますが、
その部分は適切に変更されているのでしょうか?
あのままだと単に黒字に白で描画されてしまうと思いますけれど。

どこまで参考にしてどこまで変更しているのかわからないのでコメントのつけようが無いです。


返信引用
初心者@rumu
 初心者@rumu
(@初心者@rumu)
ゲスト
結合: 23年前
投稿: 30
Topic starter  

ちょっと説明のしかたが悪かったので説明し直します。

(ツリービューの場合)

 ・WM_CREATE のところでツリービューを作成した後に、

  TreeView_SetBkColor( hTree, RGB(r,g,b));

  でツリービュー全面を淡い青色に設定し直したのは良いのですが、

  ツリービューに表示された

   ① アイコン周辺
   ② 文字周辺
 
  では淡い青色にはならずにシステムカラーのままとなっています。
  それで、システムカラーの部分も淡い青色となるように、前記 http://~を参考にし
  て下記のようにウィンドウスタイルの付け直しをしてみました。

// ツリービューコントロールの現在のウィンドウスタイルを取得
lStyle = GetWindowLong(hTree, GWL_STYLE );
lStyle &= ~( TVS_HASLINES | TVS_HASBUTTONS |TVS_EDITLABELS );

// 一度ウィンドウスタイルを外す
SetWindowLong( hTree, GWL_STYLE, lStyle );
// ウィンドウスタイルを指定
lStyle |= ( TVS_HASLINES | TVS_HASBUTTONS | TVS_EDITLABELS);

// もう一度ウィンドウスタイルを設定
SetWindowLong( hTree, GWL_STYLE, lStyle );

それでもダメだったのですが、やり方に問題があるのでしょうか。それとも参考例
   の選択に誤りがあったのでしょうか。よろしくお願いします。


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

> ① アイコン周辺
>
について気になるところが。
多分イメージリストを使っていると思いますが、
背景の白色も含めたビットマップを使っていませんか?


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

SetBkColorは文字の背景色だったと思うのでアイコンの背景色とは無関係でしょう。
アイコンの場合は透過色になっていれば、背景色が出てくるはずですけれど、
sugarさんの指摘のようにきちんと透過できる状態でアイコンが作成されているか
確認した方がいいと思いますよ。
ちなみにイメージリストを作成する時に、ILC_MASKを指定していないと透過にならなかったと
思います。


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

ダイアログベースの簡単なテストプログラムで

「コントロールの背景色を変える・その1」

を確認したところ、特に問題無くうまく行きました。
ボタンと線の色までは変わっていませんでしたが、文字とボタンの中の+と-は
設定した色で描画されています。
背景色も文字の背景色とツリーコントロールの背景色も一気に変わりましたから、
全く手間いらずでした。
背景色の方はコントロールの背景色を変えるコードを書かないと駄目かと思ってましたから。


返信引用
初心者@rumu
 初心者@rumu
(@初心者@rumu)
ゲスト
結合: 23年前
投稿: 30
Topic starter  

sugarさん、PATIOさん、ありがとうございます。PATIOさん、お手数おかけし
て恐縮です。

ツリービュー、リストビュー共に表示されているのはシステムイメージリストからのも
ので、どうもシステムアイコンの透過されるはずの部分(絵の周辺部分)にシステムカ
ラーが出てきているような感じがします。文字自身の背景色もそのような感じがしま
す。このような場合はどう考えてどう対処したらいいのでしょうか。
 もう少し自分なりに調べてみます。何か心当たりがありましたら、よろしくお願いし
ます。


返信引用
初心者@rumu
 初心者@rumu
(@初心者@rumu)
ゲスト
結合: 23年前
投稿: 30
Topic starter  

こんにちは。半分解決しました!
リストビュー内の文字の背景色は、ListView_SetTextBkColor関数でOK!でした。
あとはツリービュー内のシステムアイコン周りの色を変えるだけですが、これが調べて
も・・・。以上、中間報告でしたぁっー。


返信引用
ナオーバ
 ナオーバ
(@ナオーバ)
ゲスト
結合: 23年前
投稿: 187
 

こんばんは、
私も初心者なので適切な回答では無いのかもしれませんが、

MFCの場合(私はMFCで勉強しているので)

// 背景色変更
m_wndTree.SetBkColor( RGB(0, 255, 255) );
// イメージリストの作成
m_TreeImgList.Create( IDB_BITMAP1, 16, 0, RGB(192, 192, 192) );
// ツリーのイメージリストの登録
m_wndTree.SetImageList( &m_TreeImgList, TVSIL_NORMAL );
// 項目の追加
HTREEITEM hRoot = m_wndTree.InsertItem( ルート, 0, 0, NULL );
HTREEITEM hChild_1 = m_wndTree.InsertItem( 第一子, 1, 1, hRoot );
HTREEITEM hChild_2 = m_wndTree.InsertItem( 第二子, 1, 1, hRoot );
// ルートを展開
m_wndTree.Expand( hRoot, TVE_EXPAND );

のソースをOnInitDialogに記述して出来ています。

IDB_BITMAP1はツールバーのビットマップをコピーして使用しているので、
表示させるアイコンの背景色はグレー(R:192, G:192, B:192)なので
イメージリストを作成するときにRGB(192, 192, 192)でマスクの設定をしています。

なので、アイコンの背景色 と イメージリストを作成するときのマスクカラー
を同じにすれば実現できるのではないでしょうか。

環境
WIN2000: SP2
VC6,0 : SP5

不適切な回答だったら無視してください。


返信引用
初心者@rumu
 初心者@rumu
(@初心者@rumu)
ゲスト
結合: 23年前
投稿: 30
Topic starter  

無事に解決しました!!!

ナオーバ さん、どうもありがとうございました。ImageList_SetBkColor関数でアイコン
の透過部分の色を初期設定することができました。

みなさん、こらからもよろしくお願いします。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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