文字色を変えます。
//DrawText用の領域を格納 RECT rc1={60,60,179,80}; RECT rc2={60,90,179,110}; RECT rc3={60,120,179,140}; COLORREF i;
文字列を3回扱うので3箇所分の領域を指定します。
変数iは戻り値を格納するのに使います。
case WM_PAINT: //デバイスコンテキストを取得 hdc = BeginPaint(hwnd, &paint); //文字色を設定 i=SetTextColor(hdc,RGB(0,0,255)); //文字列を描画 DrawText(hdc,_T("Blue color"),-1,&rc1,DT_CENTER); SetTextColor(hdc,RGB(255,0,0)); DrawText(hdc,_T("Red color"),-1,&rc2,DT_CENTER); //文字色を戻す SetTextColor(hdc,i); DrawText(hdc,_T("Default(Black) color."),-1,&rc3,DT_CENTER); //デバイスコンテキストを解放 EndPaint(hwnd, &paint); return 0 ;
SetTextColor関数で文字の色を変更します。
文字色は0x・・・の16進数で00ff00などのように数値で指定することが出来ますが
ここではRGBマクロを使っています。こっちのほうがいろいろと便利なので。
SetTextColorは戻り値に元の色が返るので、はじめに色を変えたときiに格納し
2回変えた後、元の色に設定します。
実行結果は以下のようになります。
色が変わっていますね。見事なカラーです。
COLORREF SetTextColor( HDC hdc, COLORREF crColor);
第一引数 hdc には、デバイスコンテキストのハンドルを指定します
第二引数 crColor には、テキストの色を指定します
戻り値 成功すれば前のテキストカラーが、失敗すればCLR_INVALIDが返ります。
では文字列の背景色を変えてみましょう。
上のソースのBeginPaint~EndPaint内のみを変更します。
//デバイスコンテキストを取得 hdc = BeginPaint(hwnd, &paint); //背景色を設定 i=SetBkColor(hdc,RGB(0,0,255)); DrawText(hdc,_T("Blue color"),-1,&rc1,DT_CENTER); SetBkColor(hdc,RGB(255,0,0)); DrawText(hdc,_T("Red color"),-1,&rc2,DT_CENTER); //背景色を戻す SetBkColor(hdc,i); DrawText(hdc,_T("Default(White) color."),-1,&rc3,DT_CENTER); //デバイスコンテキストを解放 EndPaint(hwnd, &paint);
SetBkColor関数で文字背景の色を変更します。
文字色は16進数またはRGB値を指定します。
iに戻り値を格納し、2回変えた後に元の色に設定します。
では実行してみます。
色が変わってますね。しかしこの色はちょっと見難いです^^;
COLORREF SetBkColor( HDC hdc, COLORREF crColor);
第一引数 hdc には、デバイスコンテキストのハンドルを指定します
第二引数 crColor には、背景の色を指定します
戻り値 成功すれば前の背景の色が、失敗すればCLR_INVALIDが返ります。
文字の背景色は、どうしても塗りつぶされるというわけではなく
バックグラウンドモードの設定次第で塗りつぶさないようにすることもできます。
上のソースのiの型とBeginPaint~EndPaint内を変更します。
int i;
SetBkModeの戻り値はint型なので変えてみます。
//デバイスコンテキストを取得 hdc = BeginPaint(hwnd, &paint); //背景状態を設定 i=SetBkMode(hdc,TRANSPARENT); DrawText(hdc,_T("TRANSPARENT"),-1,&rc1,DT_CENTER); //背景状態を戻す SetBkMode(hdc,i); DrawText(hdc,_T("Default(OPAQUE)."),-1,&rc3,DT_CENTER); //デバイスコンテキストを解放 EndPaint(hwnd, &paint);
SetBkMode関数で塗りつぶし設定を変更します。
指定はマクロを使い、TRANSPARENTなら塗りつぶさないように、OPAQUEなら塗りつぶすようにします。
しかし、今回はiに戻り値を格納し、変えた後にiを使い元の設定に戻しています。
上では塗りつぶされていませんね。
int SetBkMode( HDC hdc, int nBkMode );
第一引数 hdc には、デバイスコンテキストのハンドルを指定します
第二引数 nBkMode には、設定するモードを指定します
nBkModeのパラメータ OPAQUE:バックグラウンドは描画される前に現在の背景色で塗りつぶします
TRANSPARENT:バックグラウンドは変更されません
戻り値 成功すれば直前のバックグラウンドモードを、失敗なら0を返します。
2005/5/20