アプリ版:「スタンプのみでお礼する」機能のリリースについて

windowの雛形で、WNDCLASSEXのstyleでCS_HREDRAW|CS_VREDRAWを付けても0にしても変わらないのですが、CS_HREDRAW|CS_VREDRAWの意味はあるのでしょうか?CS_HREDRAW|CS_VREDRAWの意味はわかっているのですが、指定しても変わらなかったので質問させていただきました。

A 回答 (2件)

> もう一つ質問なのですが基本的にCS_HREDRAW CS_VDRAW は付けといた方がいいのでしょうか?


場合によります。
 ウィンドウのサイズが小さくなった時に再描画が必要な場合は、CS_HREDRAW
CS_VREDRAW は必要でしょう。
例えば、
・画像ビューアで、ウィンドウのサイズ変更した時に、表示する画像を伸縮表示する場合。
・ウィンドウの右側や下側等に、現在時刻を表示するような場合。

> そのコードでやってみましたが、見た感じやっぱり変化なしです。どいうことなのでしょうか?
WM_PAINTの呼ばれる条件が違う事が確認できると思いますが、コンソールを有効にして、
コンパイルしてみましたか?

そもそも、ソースコードを動かしては見たけど、コード自体は読んでないとか
だったりするのでしょうか。
    • good
    • 0
この回答へのお礼

すみません。同じような結果になっていました。違いがわかってよかったです。回答ありがとうございました。

お礼日時:2009/12/10 16:21

こちらの環境では、動作が変わるみたいです。



・CS_HREDRAW CS_VDRAW 有効時
  ウィンドウのサイズを小さくする時に、クライアント領域全体を再描画す
  るように要求される。
  ウィンドウサイズを大きくする時に、クライアント領域全体を再描画する
  ように要求される。

・CS_HREDRAW CS_VDRAW 無効時
ウィンドウサイズを小さくする時に、WM_PAINTが発生しない。
ウィンドウサイズを大きくする時に、クライアント領域の増えた領域を
再描画するように要求される。

のような結果でした。

以下、例です。
----------------------------------------------------------------------
LRESULT CALLBACK MyWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  RECT rect;
  BOOL bErase;
  BOOL boResult;
  
  switch (uMsg)
  {
    case WM_DESTROY:
      PostQuitMessage(0);
      break;
    case WM_PAINT:
      printf("wm_paint\n");
      bErase = FALSE;
      boResult = GetUpdateRect(hWnd, &rect, bErase);
      if (boResult)
      {
        printf("updateRect(%ld,%ld,%ld,%ld)\n", rect.left, rect.top
            , rect.right, rect.bottom);
      }
      ValidateRgn(hWnd, NULL);
      break;
    default:
      return DefWindowProc(hWnd, uMsg, wParam, lParam);
  }
  return 0L;
}

この回答への補足

もう一つ質問なのですが基本的にCS_HREDRAW CS_VDRAW は付けといた方がいいのでしょうか?

補足日時:2009/12/09 22:10
    • good
    • 0
この回答へのお礼

そのコードでやってみましたが、見た感じやっぱり変化なしです。どいうことなのでしょうか?

お礼日時:2009/12/09 22:07

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