戻る 第6章 キーボード読みこみ 次へ

ソース 実行ファイル
sdk06.cpp sdk06.exe

今回はこちらからの入力を受け取らせましょう。
まずはキー入力

これは「!」をキーボードから打った図です。
ちゃんと表示されてますね。


#include <windows.h>

LRESULT CALLBACK WinProc(HWND hwnd, UINT msg,WPARAM wP, LPARAM lP)
{
	HDC	hdc;
	PAINTSTRUCT ps;
	char str[40];
	switch(msg){
		case WM_CHAR://キーボードが押された
			hdc = GetDC(hwnd);//デバイスコンテキストの取得
			wsprintf(&str,"%c",(char)wP);//キーボードのどこが押されたかを取得
			TextOut(hdc,16,16,&str,1);//クライアント領域に出力
			ReleaseDC(hwnd,hdc);//デバイスコンテキストの解放
			break;
		case WM_DESTROY:
			PostQuitMessage(0);
			break;
		default:
		return DefWindowProc(hwnd, msg, wP, lP);
	}
	return 0;
}

ここでSwitchの中に「WM_CHAR」が追加されてますね。
これはキーボード入力のメッセージです。
今回は入力を受けないとダメなのでこのメッセージを取得しましょう

そういえば前回詳しく書いていませんでしたけど
取得したいメッセージをswitchに書き入れて始めてメッセージが取れます。
書いていなければWindowsが自動的に「なにも反応なし」と処理します。

たとえば今回のプログラムでは
WM_CHARWM_DESTROYの2つしか書いてません
この状態では他のメッセージは自動的にWindowsが処理します。

さて,実際に処理の内容を解説しましょう
case WM_CHAR://キーボードが押されたときここに来ます
	hdc = GetDC(hwnd);
	//さてここで新しい要素があります。
	//strにwPを代入していますね。
	//このwPは引数として送られてきて,入っている内容はメッセージによって違います。
	//今回の場合(WM_CHAR)では押された文字が入ってます。
	//それをchar型の変数に入れています。
	wsprintf(&str,"%c",(char)wP);

	TextOut(hdc,16,16,&str,1);
	ReleaseDC(hwnd,hdc);
	break;