◇PocketPC2002開発 〜文字表示〜

Windowsで文字表示と言えば TextOutです。
ですが、WindowsCEでは使えないとの情報があり、試したところダメでした(:_;)

○代わりの APIは?

WindowsCEでカットされた APIは、代わりがある為です。
他に文字を表示する APIを調べたところ、DrawTextがあることが分かりました。
DrawTextの使い方は WindowsAPIリファレンスを見て下さい。

○固定文字を表示してみよう

文字表示は WM_PAINTにて行います(意味が分からない人はソースを WM_PAINTで検索して下さい)

RECT rect;
rect.left=0;
rect.top=0;
rect.right=200;
rect.bottom=40;
DrawText(hdc, _T("test"), -1, &rect, DT_LEFT);

通常の Windowsと違う所は、文字列を直接書けないところですね。
必ず _T("文字列")と記述しなければなりません。
他の関数でも言える事ですので、覚えておきましょう。

○変数に代入した文字を表示してみよう

文字が表示できなければ何も始まらないので、別のサンプルも書いておきます。
変数に代入して表示する方法です。

RECT rect;
TCHAR tchar[256];
rect.left=0;
rect.top=0;
rect.right=200;
rect.bottom=40;
strcpy((char*)tchar, "test");
DrawText(hdc, tchar, -1, &rect, DT_LEFT);

但し、元の文字列が char型の場合は、TCHAR型へ変換する必要があります。

char s[256];
RECT rect;
TCHAR tchar[512];
strcpy(s, "testes");
rect.left=0;
rect.top=0;
rect.right=200;
rect.bottom=40;
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,s,strlen(s) + 1,tchar,sizeof(tchar));
DrawText(hdc, tchar, -1, &rect, DT_LEFT);

ここで注意点です。
MultiByteToWideChar関数の元の文字列長の記述 strlen(s)+1となっているのは、strlen関数は末端の '\0'を省いた長さを返す為です。
この +1を記述しないと、コンバートされた文字列の末端に '\0'が入りません(ハマりそうになりました)
それから、charは 1バイト表記、TCHARは 2バイト表記ですので、単純計算で charの倍のサイズを TCHARに確保しておく必要があります。


トップメニュープログラマ専用PocketPC2002