OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

TextOut( ) が動かない

  • 暇なときにでも
  • 質問No.181602
  • 閲覧数235
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 59% (194/328)

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: からのつながりが
ある場合でないと実行されないんですか?
ソースのおかしいところがあったら教えてください。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル13

ベストアンサー率 39% (632/1595)

BeginPaint(),EndPaint() が使えるのは WM_PAINT メッセージの時だけですよ。それ以外の時には GetDC() と ReleaseDC()を使わないとなりません。
お礼コメント
A__

お礼率 59% (194/328)

ありがとうございます。
そんなことはないだろうと思っていたのに
case WM_PAINT でしか使えなかったんですね。
投稿日時 - 2001-12-09 00:18:27
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.2
レベル14

ベストアンサー率 50% (1122/2211)

> エスケープキーで文字表示をやりたいけど こういう時には、キーが押されたときに文字表示をするように作るのではなく、 再描画を促すように作る方が良いです。 InvalidateRect() だったかな。 このソースで描画されない理由は、No.1 の回答の通りです。 ...続きを読む
> エスケープキーで文字表示をやりたいけど

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

InvalidateRect() だったかな。

このソースで描画されない理由は、No.1 の回答の通りです。
お礼コメント
A__

お礼率 59% (194/328)

InvalidateRect(hWnd,NULL,TRUE);
で、なぜか
case WM_PAINT:
が動作しました。
ありがとうございます。
投稿日時 - 2001-12-09 13:43:44


  • 回答No.3
レベル14

ベストアンサー率 50% (1122/2211)

> InvalidateRect(hWnd,NULL,TRUE); > で、なぜか > case WM_PAINT: > が動作しました。 「なぜか」ではなく、InvalidateRect() が、そういう目的で使うために用意されて いる API だから、です。別の質問であった ValidateRect() の逆ですね。 では、頑張って下さい。 ...続きを読む
> InvalidateRect(hWnd,NULL,TRUE);
> で、なぜか
> case WM_PAINT:
> が動作しました。

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

では、頑張って下さい。
お礼コメント
A__

お礼率 59% (194/328)

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

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

という感じで覚えておくことにしました。
ありがとうございます。
投稿日時 - 2001-12-10 21:17:25
このQ&Aのテーマ
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ