質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2661閲覧

コントロールの色付け

BeatStar

総合スコア4958

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/10/10 01:53

C/C++ ( Windows API 実装で GUI ) でやっています。

Windows API 実装で GUIを組んでいますが、
コントロールの色づけができないです。

※ 一応「Windows API コントロール 色づけ」等でも検索してみました。

CCommandクラスというクラス ( ウィンドウプロシージャ内で動き、VB等のような感じです。 )
を作り、

C++

1/* YELLOW や BLACK 等は RGBで指定するのが面倒なので 2#define BLACK RGB(...) 3のように定義しています。*/ 4 5class CCommand{ 6 public: 7 LRESULT ColoringStatic( WPARAM wp, LPARAM lp ){ 8 HWND hControl; 9 10 hControl = (HWND)lp; 11 12 switch( GetDlgCtrlID( hControl ) ){ 13 case 102: 14 return this->Color( 102, YELLOW, BLACK ); 15 } 16 } 17 18 ... // その他メンバ関数 19 private: 20 LRESULT Color( int ControlID, COLORREF fontColor, COLORREF bgColor ){ 21 HBRUSH bkColorBrush; 22 SetBkMode( (HDC)GetDlgItem( this->hWnd, ControlID ), TRANSPARENT ); 23 SetTextColor( (HDC)GetDlgItem( this->hWnd, ControlID ), fontColor ); 24 bkColorBrush = CreateSolidBrush( bgColor ); 25 return (LRESULT)bkColorBrush; 26 } 27 28 HWND hWnd; // 担当するウィンドウ 29 30 ... // その他 31}; 32 33``` 34 35でやって、 36 37WM_CTLCOLORSTATICメッセージを受け取ったときに 38 39ウィンドウプロシージャ内で 40 41return Command.ColoringStatic( wp, lp ); 42 43としています。 44 45コンパイルは通り、動くことは動くのですが、 46コントロールの色が変です。 47 48本来なら、 49 50Staticコントロール部分全体の色が 黒で、文字色が黄色 51 52になるはずが、 53 54実際には 55背景色 は黒で OKですが、文字部分が "白色の画像に文字を書いた画像" をコントロールに張り付けられているような 56感じです。 57 58これを回避するにはどうすればいいでしょうか。 59 60[環境等] 61言語: C/C++ ( Windows API 実装 ) 62コンパイラ: MinGW 63 64宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

背景とブラシの色は同じにしてみてください
SetBkMode( (HDC)GetDlgItem( this->hWnd, ControlID ), TRANSPARENT );
なので、ここのTRANSPARENTを黒色にしてみてください
文字は文字で背景色を持っているので、文字の持っている領域が白になっています

あとブラシの変数宣言はここでも大丈夫かな?自分の場合、常にメンバ変数で別のところに宣言しているので
透過はそのアイテム自体を透過させようとしているだけなので、
中の表示色を変えようとする場合には効果がなかったと思います。
例えば、コントロールを置いた背景のダイアログ色と同じにしようという場合には、効果があります。
この場合、ブラシも透過色を設定する必要がありますが。

自前では試していないので間違っていたらすみません

投稿2016/10/19 10:38

ardin

総合スコア544

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2016/10/25 02:33

外出先で、手元にないので、試して見ます。
guest

0

こんにちは。

実際にやったことはないですが、 SetBkMode( (HDC)GetDlgItem( this->hWnd, ControlID ), TRANSPARENT );が怪しいです。
Windows APIで言う「背景」はそのコントロールやウィンドウの「下」の画像を指します。
つまり、今、黒・黄色で描画しようとしているコントロールが載っているウィンドウの色がテキストの背景になっているのではないでしょうか?
SetBkMode()をコメントアウトしてみると良いように思います。

投稿2016/10/10 02:51

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2016/10/10 11:29

今外出中で、手元にないので、試して見ます。
BeatStar

2016/10/19 01:44

すみません。 試してみたところ、それ( SetBkMode をコメントアウト ) でもダメでした...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問