今回はキー入力を取得してみます
OnChar関数を作成し、メッセージクラッカーに渡します
戻り値、引数は次の通りです

/* void Cls_OnChar(HWND hwnd, TCHAR ch, int cRepeat) */
#define HANDLE_WM_CHAR(hwnd, wParam, lParam, fn) \
   ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)

注目して欲しいのはwParamとlParamの扱いです
wParamはTCHAR型に、lParamの下位バイトはint型にキャストされています
LOWORDは

#define LOWORD(l)           ((WORD)((DWORD_PTR)(l) & 0xffff))

で定義されているマクロで下位バイトを示します
このように、wParamとlParamの取扱いはメッセージごとに違います
WM_DESTROYでは使用しませんでした
メッセージクラッカーの定義に従えば、パラメータの適切な使い方がわかります

ちなみにここでは使いませんが
上位バイトを示すにはHIWORDというマクロを使います

#define HIWORD(l)           ((WORD)((DWORD_PTR)(l) >> 16)) 

ではキー入力メッセージ処理部分を書いてみましょう
どのキーが押されたかというメッセージは
WM_CHARメッセージが送られてきます

       //-------------------------------------------------------//
	//	キー文字メッセージ処理
	//
	//	引数:	hWnd			ウィンドウハンドル
	//		ch			入力された文字
	//		cRepeat			リピートカウント(長押し時、キー処理を行う回数)
	//-------------------------------------------------------//
	void OnChar(HWND hWnd, TCHAR ch, int cRepeat){
		_tprintf(_T("%c"),ch);
	}

	//------------------------------------------------------//
	//	ウィンドウ破棄メッセージ処理
	//
	//	引数:	hWnd	ウィンドウハンドル
	//------------------------------------------------------//
	void OnDestroy(HWND hWnd){
		PostQuitMessage(0); 
	}

	//-----------------------------------------------------//
	//	ウィンドウプロシージャ
	//	デフォルトの処理はDefWindowProc関数で行う
	//
	//	引数:	hWnd	ウィンドウハンドル
	//			msg		メッセージ
	//			wParam	パラメータ
	//			lParam	パラメータ
	//
	//	戻り値:処理結果
	//-----------------------------------------------------//
	LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
	
		switch(msg){
			// キーボード
			HANDLE_MSG(hWnd,WM_CHAR,OnChar);

			HANDLE_MSG(hWnd,WM_DESTROY,OnDestroy);
		}
		return DefWindowProc(hWnd, msg, wParam, lParam);
	}

デバックコンソールを表示しておいてください
_tprintf関数は通常のprintf関数とUnicode文字出力用のwprintf関数を切り替えるマクロです
TCHAR型は文字コード定義によってchar型とwchar_t型が切り替わる文字です
文字に関しては全てTCHAR型で取り扱えば、文字コードの問題は回避できます

ウィンドウにフォーカス状態でキーを打てば入力できます
key.GIF

全ソースコードは下から
filemain.cpp

(^ω^)やったお0
何これwww意味不すぎwww0
。(`ω´#)。あぁん?最近、だらしねぇな0

添付ファイル: filemain.cpp 653件 [詳細] filekey.GIF 507件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-11-25 (木) 14:36:08