「Windows API/文字表示の命令」の版間の差分

削除された内容 追加された内容
TCHAR型とユーザ定義関数
5 行
 
Windows APIの文字表示で、いちばん簡単な関数は、 TextOut という関数です。
<syntaxhighlight lang=c"C">
TextOut(hdc, 10, 30, TEXT("テスト"), 3);
</syntaxhighlight>
17 行
 
ただし、このTextOut関数など、ウィンドウを描画するための関数を書ける位置は限られていて、
<syntaxhighlight lang=c"C">
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
</syntaxhighlight>
26 行
 
すでに、
<syntaxhighlight lang=c"C">
case WM_PAINT:
{
39 行
とあるので、そこに TextOut 関数を挿入し、
 
<syntaxhighlight lang=c"C">
case WM_PAINT:
{
87 行
 
そのクラス登録の一連のコード中の70行目あたりに、
<syntaxhighlight lang=c"C">
wcex.lpfnWndProc = WndProc;
</syntaxhighlight>
94 行
=== 文字表示での変数などの活用 ===
 
<syntaxhighlight lang=c"C">
TextOut(hdc, 10, 20, TEXT("Hello"), 5);
</syntaxhighlight>
108 行
 
コード例
<syntaxhighlight lang=c"C">
static TCHAR aisatu[60] ;
lstrcpy(aisatu, TEXT("Hello"));
131 行
 
 
=== TCHAR型とユーザ定義関数 ===
TCHAR型でもchar型と同様の方法で、下記コードのようにユーザ定義関数の引数に使うことができます。(ただしwindowsAPI側の特殊事情として、HDC hdc などデバイスコンテクストも引数に加えないといけない。)
 
windowsAPIではあまり実用性の無い例だが、下記コードのようにTCHAR型もユーザ定義関数の引数にすることが可能である。
 
;コード例
 
コード上部の「// グローバル変数」宣言部分には、
<syntaxhighlight lang="C">
void testText(HDC hdc, int x, int y, TCHAR* str1) {
TextOut(hdc, x, y, str1, lstrlen(str1));
 
}
</syntaxhighlight>
 
 
case WM_PAINT: 側は、
<syntaxhighlight lang="C">
// TODO: HDC を使用する描画コードをここに追加してください...
 
static TCHAR aisatu[60];
lstrcpy(aisatu, TEXT("Hello2"));
//TextOut(hdc, 10, 20, aisatu, lstrlen(aisatu));
testText(hdc, 10, 20, aisatu);
 
</syntaxhighlight>
 
;実行結果
Hello2
 
となります。
 
=== MSDNのシンタックスの読みかた ===
たとえば、マイクロソフトの開発者むけサイト MSDN を見ると、TextOut関数について、
<syntaxhighlight lang=c"C">
BOOL TextOutA(
HDC hdc,
165 ⟶ 196行目:
 
プログラミング中にTextOut関数を実際に呼び出して使用するための関数を記述したい場合は、単に
<syntaxhighlight lang=c"C">
TextOutA(
HDC hdc,
187 ⟶ 218行目:
 
実際、MSDNのサンプルコードでは、
<syntaxhighlight lang=c"C">
TextOut(hdc,r.left,r.top,text, ARRAYSIZE(text));
</syntaxhighlight>
239 ⟶ 270行目:
結局、身長の変数 sintyo を画面に表示するには・・・
 
<syntaxhighlight lang=c"C">
int sintyo = 153 ; // この 153 を画面に表示したい
static TCHAR henkan[50] ; // 文字列を格納するための変数 henkan を準備
256 ⟶ 287行目:
 
;実数型の場合のコード例
<syntaxhighlight lang=c"C">
double sintyo = 153 ; // double型の場合
static TCHAR henkan[50] ;
274 ⟶ 305行目:
そのあと、上記の章と同様に sprintf すれば、小数点の上位2ケタの表示がされます。
 
<syntaxhighlight lang=c"C">
// 正常に動作するコード例
int hensuu = 0.38 ;
298 ⟶ 329行目:
 
 
<syntaxhighlight lang=c"C">
// ダメなコード例
int hensuu = 0.38 ;
330 ⟶ 361行目:
なお、int整数値を TCHAR 形に変換するには、_itot_s を使います。
 
<syntaxhighlight lang=c"C">
_itot_s(sintyo , henkan, 200, 10); // 第4引数の「10」は10進数という意味。
TextOut(hdc, 10, 20, henkan, lstrlen(henkan));
344 ⟶ 375行目:
2つ以上の文字を連結したい場合は、単に、C言語の sprintfs のTCHAR版である <code>_stprintf_s</code> を使えばいいだけです。
 
<syntaxhighlight lang=c"C">
_stprintf_s(mojibuf, TEXT("%s %s"), TEXT("私の名は"), person_name);
TextOut(hdc, 10, 20, mojibuf, lstrlen(mojibuf));
358 ⟶ 389行目:
TCHAR型の配列は、下記のようになります。
 
<syntaxhighlight lang=c"C">
TCHAR syouhinName[3][40] = {
TEXT("牛乳"),