0から始めるVisualStudio2022:ソフト開発塾
今回は、文字を表示してみよう
いつものように
『ファイル』『追加』『新しいプロジェクト』
C++の空のプロジェクトを選んで
sample006のプロジェクトを作成
sample003のプロジェクトのソースファイル sample003.cpp を、コピー
sample006のプロジェクトのソースファイルに、貼り付け
名前の変更、sample006.cppにする
sample006を『プロジェクト』『スタートアッププロジェクトに設定』で変更しておく
Window系で表示するには、
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
switch (message) {
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
break;
}
return 0;
}
ここの、ペイントのイベントで表示する
文字を表示する処理自体の関数を sample_text_print として
修正(追加)すると
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
switch (message) {
case WM_PAINT:
sample_text_print(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
break;
}
return 0;
}
になる。
で、関数 sample_text_print は、
void sample_text_print(HWND hWnd) {
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 0, 0, "SAMPLE006", 9);
EndPaint(hWnd, &ps);
}
ビルド
あちゃちゃちゃ、またエラーが出る
1>C:\softca\sample\sample003\sample006.cpp(62,5): error C2664: 'BOOL TextOutW(HDC,int,int,LPCWSTR,int)': 引数 4 を 'const char [10]' から 'LPCWSTR' へ変換できません。
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um\wingdi.h(5147,25): message : 'TextOutW' の宣言を確認してください
え?、TextOutWなんて、コーディングしていなぞ!!
ヘルプによると
wingdi.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして TextOut を定義します。
なので、とりあえず
TextOut を TextOutA に変えて
ビルド
前にも、出たエラーが
1>MSVCRTD.lib(exe_main.obj) : error LNK2019: 未解決の外部シンボル main が関数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) で参照されました
エラーが出ないように、リンクの設定を変える
『プロジェクト』『プロパティ』の「リンカー」「システム」
サブシステムを「コンソール」から「Windows」に変える
ビルド
文字が表示できました。
あ、そうだ、改行はどうなるんだろう
TextOutA(hdc, 0, 0, "SAMPLE006\r\nSAMPLE006",20);
に、変えて
だめなのか。
どうも DrawText を使う様だ。
RECT xy_size;
xy_size.top = 24;
xy_size.left = 0;
xy_size.right = 200;
xy_size.bottom = 200;
int rc;
rc=DrawTextA(hdc, "sample006\r\nsample006", -1, &xy_size, DT_LEFT );
を、追加して実行すると
と、できました。
今回は、ここまで。
Top 次