- 画面に文字列を表示してみよう -



GDI(Graphics Device Interface)を利用してウインドウ上に文字列を表示する 簡単なプログラムを作ってみたいと思います
大まかな流れは以下になります

「デバイスコンテキスト取得」→「画面出力」→「デバイスコンテキストの開放」



≪ MFC・SDIでの作成例 ≫


 ■ クラスウイザードを呼び出しViewクラスにWM_PAINTを追加する



※C***View → WM_PAINT → 関数の追加





 ■ 追加したOnPaint関数に文字列を表示するソースを追加


///////////////////////////////////////////
// CTest06View クラスのメッセージ ハンドラ

void CTest06View::OnPaint()
{
CPaintDC dc(this); // 描画用のデバイス コンテキスト

// TODO: この位置にメッセージ ハンドラ用のコードを追加してください

//デバイスコンテキストのポインタ宣言
CDC* pDC;

//デバイスコンテキストの取得
pDC = GetDC();

//デバイスコンテキストへTextOut関数で文字列を出力
pDC->TextOut(0,0,"メッセージ表示テスト");

//デバイスコンテキストの開放
ReleaseDC(pDC);

// 描画用メッセージとして CView::OnPaint() を呼び出してはいけません
}

※TextOut関数の最初と2番目の引数はx,y座標。3番目はCString型文字列等





 ■ 以上コンパイルすれば完成



※TextOut関数で指定した座標に設定文字列が表示される





上記で完成ですがただ表示するだけでは面白くないのでちょっとアレンジしてみます
アレンジバージョンではマウス左クリック位置に文字を表示するようなプログラムを考えてみます





 ■ Viewクラスに表示座標をあらわすint型メンバー変数 m_x m_y を作成










 ■ クラスウイザードを呼び出しマウスの左クリックイベントを追加








 ■ 追加したクリックイベントのOnLButtonDown関数にソースを追加


void CTest06View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください

//マウスクリック位置のX座標をメンバー変数m_xに代入
m_x = point.x;

//マウスクリック位置のY座標をメンバー変数m_yに代入
m_y = point.y;

//表示の為先程作成したOnPaint関数を呼び出す
OnPaint();

CView::OnLButtonDown(nFlags, point);
}






 ■ 先程作成したOnPaint関数のソースを修正


/////////////////////////////////////
// CTest06View クラスのメッセージ ハンドラ

void CTest06View::OnPaint()
{
CPaintDC dc(this); // 描画用のデバイス コンテキスト

// TODO: この位置にメッセージ ハンドラ用のコードを追加してください

//デバイスコンテキストのポインタ宣言
CDC* pDC;

//デバイスコンテキストの取得
pDC = GetDC();

//デバイスコンテキストへTextOut関数で文字列を出力
pDC->TextOut(m_x,m_y,"メッセージ表示テスト");

//デバイスコンテキストの開放
ReleaseDC(pDC);

// 描画用メッセージとして CView::OnPaint() を呼び出してはいけません
}

※TextOut関数のx,y座標を先程作成したメンバー変数に変更





 ■ 以上コンパイルすれば完成



※マウスでクリックするとクリック位置に設定文字列が表示される