最新閲覧日:

LRESULT CALLBACK WndProc(
HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam){

PAINTSTRUCT ps;
HDC hdc;

switch(msg){
case WM_KEYDOWN:
 if( wParam == VK_ESCAPE ){
  hdc = BeginPaint(hWnd, &ps);
  TextOut(hdc,0,0,str,strlen(str));
  EndPaint(hWnd, &ps);
 }
 break;
case WM_PAINT:
 break;

エスケープキーで文字表示をやりたいけど
TextOut( ) が動作していないみたいでした。

switch(msg){
case WM_KEYDOWN:
 if( wParam == VK_ESCAPE ){
  hdc = BeginPaint(hWnd, &ps);
  TextOut(hdc,0,0,str,strlen(str));
  EndPaint(hWnd, &ps);
 }
 break;
case WM_PAINT:
 hdc = BeginPaint(hWnd, &ps);
 TextOut(hdc,0,0,str,strlen(str));
 EndPaint(hWnd, &ps);
 break;

とすると、常に文字が表示されたから、やっぱり
case WM_KEYDOWN: の中の TextOut( ) が
動作していないんだと思いました。
TextOut( ) は case WM_PAINT: からのつながりが
ある場合でないと実行されないんですか?
ソースのおかしいところがあったら教えてください。

A 回答 (3件)

> InvalidateRect(hWnd,NULL,TRUE);


> で、なぜか
> case WM_PAINT:
> が動作しました。

「なぜか」ではなく、InvalidateRect() が、そういう目的で使うために用意されて
いる API だから、です。別の質問であった ValidateRect() の逆ですね。

では、頑張って下さい。
    • good
    • 0
この回答へのお礼

InvalidateRect(hWnd,NULL,TRUE);
UINT に WM_PAINT を代入。

ValidateRect(hWnd,NULL);
UINT から WM_PAINT を消す。

という感じで覚えておくことにしました。
ありがとうございます。

お礼日時:2001/12/10 21:17

> エスケープキーで文字表示をやりたいけど



こういう時には、キーが押されたときに文字表示をするように作るのではなく、
再描画を促すように作る方が良いです。

InvalidateRect() だったかな。

このソースで描画されない理由は、No.1 の回答の通りです。
    • good
    • 0
この回答へのお礼

InvalidateRect(hWnd,NULL,TRUE);
で、なぜか
case WM_PAINT:
が動作しました。
ありがとうございます。

お礼日時:2001/12/09 13:43

BeginPaint(),EndPaint() が使えるのは WM_PAINT メッセージの時だけですよ。

それ以外の時には GetDC() と ReleaseDC()を使わないとなりません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
そんなことはないだろうと思っていたのに
case WM_PAINT でしか使えなかったんですね。

お礼日時:2001/12/09 00:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ