Comments
Transcript
1 第8回 文字列の書式 1 フォントの指定 [サンプル(WndProc 関数の一
第8回 プログラミング基礎(2008/6/12) 第8回 1 文字列の書式 フォントの指定 [サンプル(WndProc 関数の一部)] 赤:関数 / 青:変数 POINTS mcur; HFONT hFont; LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hDC; PAINTSTRUCT ps; char Strng[100] = ""; switch( message ) { case WM_CREATE: hFont = CreateFont( 24, 0, 0, 0, 400, FALSE, FALSE, FALSE, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "MS P明朝"); break; case WM_LBUTTONUP: mcur = MAKEPOINTS( lParam ); InvalidateRect( hWnd, NULL, TRUE ); break; case WM_PAINT: hDC = BeginPaint( hWnd, &ps ); SelectObject( hDC, hFont ); SetTextColor( hDC, RGB(255,0,0) ); wsprintf( Strng, "%d x %d", mcur.x, mcur.y ); TextOut( hDC, mcur.x, mcur.y, Strng, strlen(Strng) ); EndPaint( hWnd, &ps ); break; case WM_DESTROY: DeleteObject( hFont ); PostQuitMessage( 0 ); break; 1 第8回 プログラミング基礎(2008/6/12) ◇ フォント指定の流れ: ① CreateFont 関数: フォントの作成 ② SelectObject 関数: フォントの指定 ③ DeleteObject 関数: フォントの破棄 ◇ CreateFont 関数: フォントの作成 返り値 = CreateFont( ①, ② , ③, ④, ⑤, ⑥, ⑦, ⑧, ⑨, ⑩, ⑪, ⑫, ⑬, ⑭ ); 返り値: フォント・ハンドル 引数①: フォントの高さ (0 = デフォルトの高さ) 引数②: フォントの平均の幅 (0 = デフォルトの幅) 引数③: X軸に対する文字送りの方向 (1/10 度単位) 引数④: X軸に対する各文字の傾き (1/10 度単位) 同じ値に設定 ③と④で「200」を設定した場合 ... 傾き 20° 引数⑤: フォントの太さ (0~900) 引数⑥: TRUE = イタリック体 引数⑦: TRUE = 下線付き 引数⑧: TRUE = 打消し線付き 引数⑨: 文字セット (通常、SHIFTJIS_CHARSET) 引数⑩: 出力精度 (通常、OUT_DEFAULT_PRECIS) 引数⑪: クリッピング精度 (通常、CLIP_DEFAULT_PRECIS) 引数⑫: 出力品質 (通常、DEFAULT_QUALITY) 引数⑬: 文字間隔と文字書体 [文字間隔] DEFAULT_PITCH = デフォルト FIXED_PITCH = 固定幅 VARIABLE_PITCH = 可変幅 [文字書体] FF_DONTCARE = デフォルト FF_MODERN = ゴシック体 FF_ROMAN = 明朝体 ※ 文字間隔と文字書体の設定は、フォント名が「NULL」のときのみ有効 ※ フォント名を指定した場合は、フォント名に対応した文字間隔・文字書体を使用 引数⑭: フォント名 MS ゴシック MS 明朝 2 MS Pゴシック MS P明朝 第8回 プログラミング基礎(2008/6/12) ◇ WM_CREATE メッセージ: ウィンドウが作成されたときに送られるメッセージ ◇ SelectObject 関数: フォントの指定 SelectObject( デバイスコンテキスト・ハンドル, フォント・ハンドル ); TextOut 関数で文字列を描画する際に使用するフォントを設定する。 ◇ SetTextColor 関数: 文字色の指定 SetTextColor( デバイスコンテキスト・ハンドル, RGB( 赤の強さ, 緑の強さ, 青の強さ ) ); TextOut 関数で文字列を描画するときの文字色を設定する。 ◇ DeleteObject 関数: フォントの破棄 DeleteObject( フォント・ハンドル ); メモリ上からフォント情報を削除する。 2 改行を含む文字列の表示 [サンプル(WndProc 関数の一部)] 赤:関数 / 青:変数 RECT rc; ・・・ case WM_PAINT: hDC = BeginPaint( hWnd, &ps ); SelectObject( hDC, hFont ); SetTextColor( hDC, RGB(255,0,0) ); wsprintf( Strng, "%d x %d", mcur.x, mcur.y ); TextOut( hDC, mcur.x, mcur.y, Strng, strlen(Strng) ); rc.left = 100; rc.right = 300; rc.top = 100; rc.bottom = 400; wsprintf( Strng, "Lecture\nof\nProgramming" ); DrawText( hDC, Strng, -1, &rc, DT_CENTER ); EndPaint( hWnd, &ps ); break; 3 第8回 プログラミング基礎(2008/6/12) ◇ DrawText 関数: 指定領域内への文字列の描画 (改行も可能) DrawText( ①, ②, ③, ④, ⑤ ); 引数①: デバイスコンテキスト・ハンドル 引数②: 文字列 (改行コード「\n」を含む文字列が可能) 引数③: 文字数 (-1 = すべての文字を表示) 引数④: 文字列を表示する領域 (RECT 構造体で指定) 引数⑤: オプションの書式 DT_LEFT = 左揃え DT_CENTER = 中央揃え DT_RIGHT = 右揃え ◇ RECT 構造体: 長方形領域の位置と大きさ LONG left 左上のX座標[pixel] LONG top 左上のY座標[pixel] LONG right 右下のX座標[pixel] LONG bottom 右下のY座標[pixel] 4