• 締切済み

WM_CHAR or WM_KEYDOWN の「wParam」について

よくわかっていないのですが、 switch (message) { case WM_CHAR: というところで、wParamから、文字の情報取得して、 HDC宣言して、TextOut関数使用…、の途中で、 wParamの文字情報は、どのようにすれば TextOut関数に渡せるのでしょうか? Visual C++を勉強したてで、勉強の成果をと思い、 テキストエディタを作ってみたいと思ったのですが、 さて、どうしたらよいのでしょうか? エラー内容は、unsigned int → const char * にできません、ということなのですが、 じゃぁ、型の変換の仕方は?という感じです。 初心者なので、簡単な例をつけて説明してくださると助かります。よろしくお願いします。

みんなの回答

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

TextOut(~, (char*)wParam, ~); と、char*型に型変換すると良い気がします。 -- TextOut関数の宣言、 TextOut(~, (const char*)szText, ~); のconstキーワードは、 「TextOut関数に渡したwParamの値をTextOut関数の内部で書き換えることはありませんので安心してね。」 という意味ですので、 unsigned int long double などの2つの単語で宣言される「型」とは意味合いが異なります。 ヘルプの説明ですと釈然としませんが、参考URLなどを読んでみてください。 プログラマの正体!? - 誰が為にconst http://www.asahi-net.or.jp/~vx2t-andu/lets/20020203.html

参考URL:
http://www.asahi-net.or.jp/~vx2t-andu/lets/20020203.html
noname#6117
質問者

お礼

何が何だかわからないのですが、 以下のソースで、できました。 お手数掛けました。また、よろしくお願いします。 ありがとうございました。 //ウインドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) { POINT pt; char s; HDC hdc; //メッセージの種類に応じて処理を分岐する。 switch (message) { case WM_CHAR: GetCaretPos(&pt); s=LOWORD(wParam); hdc=GetDC(hWnd); HideCaret(hWnd); TextOut(hdc,pt.x,pt.y,&s,1); SetCaretPos(pt.x+13,pt.y); ShowCaret(hWnd); ReleaseDC(hWnd,hdc); return 0; case WM_CREATE: CreateCaret(hWnd,NULL,3,20); ShowCaret(hWnd); return 0; case WM_DESTROY:/*ウインドウが破棄されたときの処理*/ PostQuitMessage(0); return 0; default:/*デフォルトの処理*/ return DefWindowProc(hWnd,message,wParam,lParam); } }

関連するQ&A