FC2ブログ


VS2017-はじめの1/10歩(9):ラベルを透かす

   プログラミング [2019/03/10]
ダイアログベースのプログラムを作る場合に「背景に画像を貼る」の続きの話になります。

画像を描いたその上に各種コントロールが表示されます。
画像を貼ってみて分かるのですが、
エディットやボタン等の入力とか機能を持ったコントロールはいいのですが、
「見出し」として付けてるラベル(スタティックコントロール)も矩形で背景が塗りつぶされていると、なんか格好悪い。

ドーンと目立たせたい場合とは別に、隣のコントロールの説明的にラベルを貼ってるだけなので、文字さえ見えれば、後ろは透けていいことがある。

で、透けさせる方法です。
他でもいくらでも解説してくれてるから、さるがいい加減な説明をする必要はないのですが、
前から言ってるように、さる自身のための備忘録ですから。

始めます。

まずは、
1)VSのリソースエディタで、ラベルを貼る際に透けさせたいラベルのプロパティ(拡張スタイル)に「透明」を選択します。
これだけでもスケスケになるんだったかな?・・・ならなかった気がします。
2)特に固定文字列を表示するだけで、他の機能を持たせるつもりがない場合、透けさせるラベルのIDはデフォルトのIDC_STATICのまま共通としておきます。

3)透けさせるのには処理コードが必要です。
ダイアログのウィンドウプロシジャ内に以下のようなWM_CTLCOLORSTATICメッセージを処理するコードを追加します。
//---------------------------------------------
//****** スタティックコントロールの背景色設定
case WM_CTLCOLORSTATIC:
if (GetDlgCtrlID((HWND) lParam) == IDC_STATIC) {
return BeTransparent((HDC)wParam);
}
else if (GetDlgCtrlID((HWND) lParam) == IDC_STTITLE) {
return ChangeColor((HDC)wParam, RGB(0,0,0), RGB(128,255,255), &g_hBrsTitle);
}
break;
//---------------------------------------------

勢いが余って透けさせないラベルの処理もはいっちゃったので、後でそっちの説明もします。
ともかくスケスケにしたいラベルのIDはIDC_STATICなのでそのIDでWM_CTLCOLORSTATICが来たら、
BeTransparentという関数を呼びます。
こんな処理です。
//---------------------------------------------
//name :BeTransparent
//function :スタテックコントロールを透過にする。
// リソースエディタでIDC_STATICのコントロールの「透過」設定が必要。
//parameter :hDc -対象コントロールのデバイスコンテキストハンドル
//global :なし
//return :ブラシハンドル(NULL_BRUSH)

LRESULT BeTransparent(
HDC hDc)
{
HBRUSH hbr;

SetBkMode(hDc, TRANSPARENT);
hbr = (HBRUSH) GetStockObject(NULL_BRUSH);
return (LRESULT) hbr;
}
//---------------------------------------------

文字背景色を透明にして、背景塗りつぶし用のブラシ(透明)をリターンします。
ブラシのハンドルは、WM_CTLCOLORSTATICの処理結果のリターン値になります。

これだけです。

では、背景色/文字色を変更する方も・・・




背景色を自分好みにしたいときは、塗りつぶし用のブラシを作る必要があるのでグローバル変数として以下を宣言しておきます。
//---------------------------------------------
HBRUSH g_hBrsTitle = NULL; //タイトル背景色
//---------------------------------------------

初期値をNULLにしておきます。

ブラシを作って適用させるのは、前の方で説明したWM_CTLCOLORSTATICメッセージ処理から
呼んでる関数
ChangeColor((HDC)wParam, RGB(0,0,0), RGB(128,255,255), &g_hBrsTitle);
の中です。内容は以下。
//---------------------------------------------
//name :ChangeColor
//function :スタテックコントロールの文字色/背景色を変更する。
//parameter :hDc -対象コントロールのデバイスコンテキストハンドル
// TxColor -文字色
// BgColor -背景色
// pBrush -ブラシハンドルのポインタ
//global :なし
//return :ブラシハンドル

LRESULT ChangeColor(
HDC hDc,
COLORREF TxColor,
COLORREF BgColor,
HBRUSH *pBrush)

{
if (*pBrush == NULL) {
*pBrush = CreateSolidBrush(BgColor);
}
SetBkMode(hDc, OPAQUE);
SetTextColor(hDc, TxColor);
SetBkColor(hDc, BgColor);
return (LRESULT) *pBrush;
}
//---------------------------------------------


当然、作ったものは使い終わったら廃棄するのが作法なので、WM_DESTROYで以下を行います。
//---------------------------------------------
case WM_DESTROY:

if (g_hBrsTitle != NULL) DeleteObject(g_hBrsTitle);
  :
break;
//---------------------------------------------


ちなみに、IDC_STTITLEのラベルには、「透明」属性は指定してません。

はい、簡単でしたね。

今回はこの辺で。
次回は、(ついでなので)ボタンコントロールの色を変える方法も入れちゃいます。
これも目新しくはないけど・・・・

では。m(__)m


スポンサーサイト





コメントの投稿

非公開コメント

カレンダー
10 | 2019/11 | 12
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
プロフィール

さるもすなる

Author:さるもすなる
さるです。別HPサイト「さるもすなる」から侵食してきました。 山菜/きのこ、それとタイトルにしたPPバンド籠のことをメインに徒然に・・・・暇を持て余したさるの手仕事:男手芸のブログってことで。

最新記事
最新コメント
月別アーカイブ
カテゴリ
天気予報

-天気予報コム- -FC2-








本家のHPのトップ
山菜や茸の話です
PPバンドの籠作品と作り方です
投稿をお待ちしております



ブログランキング・にほんブログ村へ にほんブログ村 ハンドメイドブログへ



マニュアルのお申し込み



検索フォーム
リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QR