Comments
Transcript
1 第7回 文字列の表示 1 文字列の表示 (WM_PAINT メッセージ処理の
第7回 プログラミング基礎(2008/6/5) 第7回 1 文字列の表示 文字列の表示 (WM_PAINT メッセージ処理の場合) [サンプル(WndProc 関数の一部)] 赤:関数 / 青:変数 HDC hDC; PAINTSTRUCT ps; ・・・ case WM_PAINT: hDC = BeginPaint( hWnd, &ps ); // 描画開始 TextOut( hDC, 100, 150, "Test Message", 12 ); // 文字表示 EndPaint( hWnd, &ps ); // 描画終了 break; ◇ BeginPaint 関数: 描画開始 デバイスコンテキスト・ハンドル(返り値) = BeginPaint( ウィンドウ・ハンドル, PAINTSTRUCT 構造体へのポインタ ); ◇ TextOut 関数: 文字列の描画 TextOut( デバイスコンテキスト・ハンドル, X座標, Y座標, 文字列, 文字数 ); ◇ EndPaint 関数: 描画終了 EndPaint( ウィンドウ・ハンドル, PAINTSTRUCT 構造体へのポインタ ); ◇ デバイスコンテキスト: ディスプレイやプリンタなどの出力デバイス(の情報) デバイスコンテキスト・ハンドルは、その識別番号 ◇ PAINTSTRUCT 構造体: 描画情報 HDC hdc デバイスコンテキスト・ハンドル(BeginPaint の返値と同じ) BOOL fErase 再描画領域がクリアされた(TRUE)/そのまま(FALSE) RECT rcPaint 再描画領域 ◇ RECT 構造体: 長方形領域の位置と大きさ LONG left 左上のX座標[pixel] LONG top 左上のY座標[pixel] LONG right 右下のX座標[pixel] LONG bottom 右下のY座標[pixel] 1 第7回 プログラミング基礎(2008/6/5) 2 文字列の表示 (WM_PAINT メッセージ処理以外の場合) [サンプル(WndProc 関数の一部)] HDC hDC; ・・・ case WM_LBUTTONUP: hDC = GetDC( hWnd ); // DC取得 TextOut( hDC, 150, 100, "Left Button Up", 14 ); ReleaseDC( hWnd, hDC ); // DC解放 break; ◇ GetDC 関数: デバイスコンテキスト・ハンドルの取得 デバイスコンテキスト・ハンドル(返り値) = GetDC( ウィンドウ・ハンドル ); ◇ ReleaseDC 関数: デバイスコンテキストの解放 ReleaseDC( ウィンドウ・ハンドル, デバイスコンテキスト・ハンドル ); 3 文字列の作成 [サンプル] int x = 12; int y = 635; char Strng[100] = ""; ・・・ wsprintf( Strng, "%d x %d", x, y ); // 文字列作成 ◇ 変数宣言と初期化: 変数の型 変数 = 初期値; 上記の例では、 変数 x を整数型で宣言するとともに、初期値として「12」を代入 変数 y を整数型で宣言するとともに、初期値として「635」を代入 変数 Strng を文字型で宣言するとともに、初期値として文字列「」(空)を代入 ◇ wsprintf 関数: 文字列の作成 wsprintf( 文字変数(文字列の保存先), 書式[, 変数, ・・・] ); 上記の例では、文字変数 Strng に文字列「12 x 635」が代入される。 2 第7回 プログラミング基礎(2008/6/5) 4 文字変数の文字列表示 [サンプル] HDC hDC; char Strng[100] = ""; ・・・ TextOut( hDC, 100, 150, Strng, strlen(Strng) ); ◇ strlen 関数: 文字列の文字数 文字数(返り値) = strlen( 文字変数 ); 5 カーソルの座標 [サンプル(WndProc 関数の一部)] HDC hDC; POINTS mcur; // POINTS 構造体 char Strng[100] = ""; ・・・ case WM_LBUTTONUP: mcur = MAKEPOINTS( lParam ); // カーソル座標 wsprintf( Strng, "%d x %d", mcur.x, mcur.y ); hDC = GetDC( hWnd ); TextOut( hDC, mcur.x, mcur.y, Strng, strlen(Strng) ); ReleaseDC( hWnd, hDC ); break; ◇ MAKEPOINTS マクロ: 座標値を POINTS 構造体に変換 POINTS 構造体(返り値) = MAKEPOINTS( 座標値 ); ◇ POINTS 構造体: 2次元の座標 SHORT x X座標 SHORT y Y座標 上記の例では、マウスの左ボタンを離したとき、マウス・カーソルの位置に、その座標値(mcur.x, mcur.y)が書式「(X座標) x (Y座標)」で表示される。 3 第7回 プログラミング基礎(2008/6/5) 6 強制的な再描画(WM_PAINT メッセージの送信) [サンプル(WndProc 関数の一部)] POINTS mcur; ・・・ HDC hDC; char Strng[100] = ""; ・・・ case WM_LBUTTONUP: mcur = MAKEPOINTS( lParam ); InvalidateRect( hWnd, NULL, TRUE ); // 再描画命令 break; case WM_PAINT: wsprintf( Strng, "%d x %d", mcur.x, mcur.y ); hDC = BeginPaint( hWnd, &ps ); TextOut( hDC, mcur.x, mcur.y, Strng, strlen(Strng) ); EndPaint( hWnd, &ps ); break; ◇ InvalidateRect 関数: 再描画領域の生成 InvalidateRect( ウィンドウ・ハンドル, 再描画領域(RECT 構造体へのポインタ), 画面消去の有無(消去=TRUE/残す=FALSE) ); ※ 第2引数「再描画領域」に「NULL」を指定すると、ウィンドウ全体が再描画の対象となる。 7 変数宣言の場所 ◇ 関数内部で宣言された変数: ローカル変数 その関数内でのみ有効であり、その関数が実行されている間だけ、値を保持する。 ◇ 関数の外で宣言された変数: グローバル変数 すべての関数で有効であり、いずれの関数が実行されている間でも、値を保持する。 4