今回も「多重起動の防止」のソースを
使いまわしますので、変更点だけを述べていきます。
wndclass.hbrBackground = (HBRUSH) GetStockObject (LTGRAY_BRUSH) ;
今までウィンドウの背景をずっと白色のブラシにしていたので、
気分転換に薄い灰色にしてみましょう。
//============================== // ウィンドウプロシージャ LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { …… //DrawText用の領域を格納 RECT rc;
構造体RECTの変数rcを宣言します。
typedef struct _RECT {
LONG left; LONG top; LONG right; LONG bottom;
} RECT;
RECTの中身は上のようになります。
左から順に、左上の点のx座標・y座標と右下の点のx座標・y座標です。
左上と右下の2点の座標内の四角形を表示領域として扱います。
//再描画要求が行われた case WM_PAINT: //デバイスコンテキストを取得 hdc = BeginPaint(hwnd, &paint); //クライアント領域を取得 GetClientRect (hwnd, &rc); //文字列を描画 DrawText(hdc,_T("Hello World!"),-1,&rc,DT_CENTER|DT_VCENTER); //デバイスコンテキストを解放 EndPaint(hwnd, &paint); return 0 ;
GetClientRect関数でウィンドウのクライアント領域の値を
変数rcに格納し、DrawText関数でrc内に中央寄せで文字列を描画しています。
ではいよいよ文字列を表示してみます。
・・・ん?文字のうしろの色が?これは次の話で解説します。
int DrawText( HDC , LPCWSTR , int , RECT * , UINT);
第一引数 HDC には、デバイスコンテキストのハンドルを指定します
第二引数 LPCWSTR には、文字列へのポインタを指定します
第三引数 int には、文字列の長さを指定します。-1なら自動的に指定されます
第四引数 RECT には、文字列を表示する領域を指定します
第五引数 UINT には、表示方法に関するマクロを指定します
UINTのパラメータ DT_LEFT:文字を左寄せにします
DT_CENTER:文字を中央寄せにします
DT_RIGHT:文字を右寄せにします
DT_TOP:文字の高さにおいて、上寄せします
DT_VCENTER:文字の高さにおいて、中央寄せします
DT_BOTTOM:文字の高さにおいて、下寄せします
DT_SINGLELINE:文字列を1行として扱います
DT_WORDBREAK:文字列を折り返せるようにします
DT_EXPANDTABS:文字列内のタブを有効にします
DT_TABSTOP:一文字目に&の効果(アンダーライン)?
DT_NOCLIP:クリッピングなしで描画する・これが指定されると若干早い
DT_INTERNAL:テキストのメトリクスを計算するためにシステムフォントを使う
DT_EXTERNALLEADING:?(効果不明)
DT_NOPREFIX:?(効果不明)
DT_CALCRECT:?(効果不明)
戻り値 成功すればテキストの高さが、失敗すれば0が返ります。
効果不明のところはお手数ですがMSDNでも参照してみて下さい。
日本語で書いてあるのに意味がわからない(汗)
マクロによっては本当に色々な効果が出せるようですね。
とりあえずDT_WORDBREAK・DT_EXPANDTABSの状態を表示してみます。
以下に変更点を書きます。
//DrawText用の領域を格納 RECT rc1={60,60,179,179}; RECT rc2={10,10,229,30};
RECTの中身を直接指定します。
//デバイスコンテキストを取得 hdc = BeginPaint(hwnd, &paint); //文字列を描画 DrawText(hdc,_T("THE EMPEROR and Empress depart Saturday..."),-1,&rc1,DT_WORDBREAK); DrawText(hdc,_T("Tab is enabled."),-1,&rc2,DT_EXPANDTABS); //デバイスコンテキストを解放 EndPaint(hwnd, &paint);
では実行してみます。
DT_WORDBREAKの場合、領域内の限界まで行くと文字列を折り返します。
しかし、ギリギリに詰めて表示されるのではなく
半角スペースの入った区切りのいいところで改行され、
折り返し部分の半角スペースは消えているのに注目してください。
DT_EXPANDTABSでは、TABキーが有効になっています。
2005/5/22