DrawText で文字列を表示する



VC++ で DrawText() を使って文字列を整形して表示します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの作成

  1. プロジェクト(DrawTxt)を作成して下さい。
    プロジェクトの作成は Windows プログラムを自動的に作成する を参照して下さい。
  2. ソースファイル(DrawTxt.cpp)を編集して DrawText() で表示する文字列を定義します。
    文字列の定義はプログラム前方の関数のプロトタイプ宣言が始まる前に置くのが良いでしょう。
    LPSTR は最後が'\0'で終わる文字列の定義で char buf[] と同じような意味です。
    文字列中の '\n' は改行コードです。ページ先頭の画像と見比べて下さい。
        LPSTR   buf=
        { "Draw Text Sample Program\n000 11111111\n2222222\n33333333 444\n5555555555555\n" };
        
  3. WM_PAINT: に文字列を整形して表示するソースコードを追加します。
    GetClientRect() はウインドウのサイズを RECT 構造体に格納する関数です。
        case WM_PAINT:
            hdc = BeginPaint (hWnd, &ps);
            // TODO: この位置に描画用のコードを追加してください...
            RECT rt;
            GetClientRect( hWnd, &rt );
            DrawText( hdc, buf, strlen(buf), &rt, DT_CENTER | DT_WORDBREAK);
            EndPaint( hWnd, &ps );
            break;
        
  4. ビルド(コンパイル)に続いて実行を行います。
    [デバッグ][デバッグなしで開始]を選択して、ビルドに続いて実行を行います。
    コンパイルの進行状況とエラーがあれば、エラーメッセージが表示されます。
  5. プログラムの確認が終われば[ファイル(F)][アプリケーションの終了(X)]で終了させて下さい。
    ウインドウの右上に表示されている[×ボタン]をクリックして終らせることもできます。
    また[Alt][F][X]のキーを順にタイプして終らせる方法もあります。

【課題1】

DrawText のフラグを組み合わせて、画面の表示を確認して下さい。
ウインドウの幅をマウスのドラッグで狭めて、DT_WORDBREAK の効果を確かめて下さい。
Text 文字列の長さに -1 を指定するとどうなるでしょう。
DrawText で使われる代表的なフラグの説明です。
フラグ フラグの説明
DT_CENTER 水平方向にセンタリングする
DT_WORDBREAK 単語の切れ目で折り返さない
DT_SINGLELINE 改行コードを無視して一行で表示
DT_BOTTOM 矩形の下辺に揃える(DT_SINGLELINE と共に指定)
DT_VCENTER 垂直方向にセンタリングする(DT_SINGLELINE と共に指定)

【課題2】

ウインドウに複数の矩形領域を設定して、それぞれに別々の文字列を表示して下さい。
  1. ウインドウのサイズを RECT 構造体に取得して DrawText で表示するコードです。
            RECT rt;
            GetClientRect(hWnd,&rt);
            DrawText(hdc,buf,strlen(buf),&rt,DT_CENTER | DT_WORDBREAK);
        
  2. 例えば、ウインドウの下半分に表示する場合には次のようになります。
            RECT rt;
            GetClientRect(hWnd,&rt);
            rt.top+= (rt.bottom-rt.top)/2
            DrawText(hdc,buf,strlen(buf),&rt,DT_CENTER | DT_WORDBREAK);
        
  3. 文字の色や文字の背景色を SetBkColor() で設定できることを確かめて下さい。

【NOTE】

RECT 構造体は WINDEF.H で次のように宣言されています。
left, top, right, bottom は、それぞれ矩形領域(長方形)の左,上,右,下の座標です。
ウインドウの座標は左上隅が「0,0」で、右及び下の座標ほど大きな値になります。
typedef struct tagRECT
{
    LONG    left;
    LONG    top;
    LONG    right;
    LONG    bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;

超初心者のプログラム入門(Win32API C++)