タイマーで表示文字を変えるには?

解決


HI-RO  2004-07-13 21:04:27  No: 53974

はじめて質問させていただきます。VC++はじめて3日目のHI-ROと申します。
現在、VC++の「標準的な"Hello World!"アプリケーション」を元に、
タイマーにより一定時間ごとに表示文字を切り替えるプログラムを作成していますが、タイマーから1度目の描画は正常に行われるのですが、2回目以降が処理されません。
領域の有効/無効の問題かとも思うのですが、解決法がわかりません。
以下にソースを掲示しますので、どなたかご助言お願いいたします。

case WM_CREATE:
      SetTimer(hWnd, 1, 500, NULL);
      break;
    case WM_TIMER:
      InvalidateRect(hWnd,&rc,true);
      break;
    case WM_DESTROY:
      KillTimer(hWnd, 1);
      PostQuitMessage( 0 );
      break;
    case WM_PAINT:
      hdc = BeginPaint (hWnd, &ps);
      SetBkColor(hdc,RGB(0,0,0));
      if (ClrFlg == 0){
        SetTextColor(hdc,RGB(255,255,255));
        TextOut( hdc,60,20,"文字列A",10);
        ClrFlg = 1;}
      else{
        SetTextColor(hdc,RGB(0,0,0));
        TextOut( hdc,60,20,"文字列B",10);
        ClrFlg = 0;}
      EndPaint( hWnd, &ps );
      break;
    default:
      return DefWindowProc( hWnd, message, wParam, lParam );

***ClrFlg はグローバル変数です。


瀬戸っぷ  2004-07-13 21:55:38  No: 53975

> InvalidateRect(hWnd,&rc,true);

のrcが正しくないのではないかと……

あと……
ClrFlgの反転をWM_PAINT中でやっている場合、ウィンドウの重なりとか
その他でWM_PAINTが飛んできた時に反転しますが、それでよろしいのでしょうか?


HI-RO  2004-07-13 22:08:12  No: 53976

>瀬戸っぷ 様
>> InvalidateRect(hWnd,&rc,true);

>のrcが正しくないのではないかと……

ご指摘のとおりでした。rcをNULLにしたところ、意図した動きになりました。

フラグ反転については、今は大まかなカタチを作る段階としてのプログラム作成ですので、これで問題ありません。

本当にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加