馬渕@最後のレスです。
ちょっとした息抜きのつもりで何年ぶりにレスしたら
この有様ですか。

Yasuhiro.Kambe wrote in [vcpp 00060607] Re: コントロールのサイズ変更での不具合:

>3.他
>  一応、私の実装は
>  WM_SIZE でサイズに応じてメモリDC(仮想メモリ2枚,マスク用3枚)のサイズ変更
>  をしてInvalidate()させてます.☆ここが重いです.

これがいけないんです。サイズ変更のドラッグ中、内部では
WM_SIZE,WM_SIZE,WM_SIZE,WM_SIZE,WM_SIZE,WM_PAINT,
M_SIZE,WM_SIZE,WM_SIZE,WM_SIZE,WM_SIZE,WM_SIZE,WM_SIZE,WM_PAINT,
.....

のように、複数回のWM_SIZE ごとに WM_PAINT が来ます。
いくら WM_SIZE で メモリDCを更新したところで、 WM_PAINT で
描画されなければ、WM_PAINT 直前の WM_SIZE 処理以外は
無駄処理になります。それが重くなる原因です。

>  WM_PAINTにてメモリDCをコントロールのクライアントにBitBltしてます.
>
>  一応、サイズ変更と再描画を分けて考えているつもりですが、何かいけない
> でしょうか?

WM_SIZE 内でのメモリDCに対する操作も厳密には描画の一部(前準備)です。
でも、WM_SIZE で描画の準備をするのは本来推奨されていません。
だから、WM_SIZE にはデバイスコンテキストが渡されていません。

一般に描画やその前準備は WM_PAINT で行われるものです。だから、デバイス
コンテキストは WM_PAINT にしか渡されません。WM_PAINT がくるまで、
描画対象がモニタ画面か、印刷か、画面での印刷プレビューか、
あるいは EMF(メタファイル)への出力か、特定できないからです。
OnSize() で処理してしまうと、描画対象が特定されていないのに、勝手に
決めつけて描画素材(MemoryDCのこと)を用意することになります。

>4.最後に
> 検討した結果、サイズ変更時、コントロールのリアルタイムの再描画は
> したいので、マスクDCのサイズ変更を軽くするしか手はなさそうです.
> 違う方法で、検討してみます.

勘違いがあるようですが、

Invalidate() を呼んでも、実際に画面領域への書き込みは WM_PAINT() が
来なければ、行われません。ほかのタスクが重たければ、Invalidate() を
10回呼んだところで、WM_PAINT は一回しか来ないかもしれません。

WM_SIZE --> サイズ変わった。 (描画とは論理的に関係ありません)
Invalidate() -->  画面上にある特定の描画済み領域は最新状態ではない
                  ことをカーネルに知らせる。この時点でも、
                  描画とはなんら直接関係はありません。
                 (自分のウィンドウが隠れていれば、いくら
                  Invalidate() しても無視されます)
WM_PAINT --> ここではじめて画面への書き込みが許可されます。
             
だから、WM_SIZE でいくら Invalidate したところで、画面へのリアルタイム
再描画にはつながりません。 WM_PAINT を受け取った時点で最新の情報に
基づいて描画できるかどうか、それがリアルタイムの画面更新です。

Windows のメッセージ処理は非同期です。WM_SIZE が来たから、WM_PAINT
がくるとは限りませんし、WM_PAINT が来たのは、WM_SIZE 以外にも理由は
たくさんあります。

私からのレスは以上です。
知ったかぶりの人間と無意味なやりとりをするヒマはありませんし、
同じことを繰り返し書くのも疲れますので。

馬渕 茂
KOAH INTERACTIVE

P.S.
 .NET の完成度の低さに絶句して、かつての VC のマスターズたちがとうとう
 MS を見放して Builder に鞍替えしたのかもね。

 最後に、

Tietew wrote in [vcpp 00060606] Re: コントロールのサイズ変更での不具合:
>違います。ウィンドウサイズが変更された結果,無効領域ができるので 
>WM_PAINT が来るだけです。サイズを縮小方向に変更するのなら,
>WM_PAINT は(自動的には)来ません。しかも,UpdateWindow() しない
>と,次のアイドル時間まで WM_PAINT は遅延されます。

 ひぇぇぇ・・・。サイズが小さくなるから、WM_PAINT が来ません?
UpdateWindow() しないと WM_PAINT が来ません?
 思いっきりシングルタスクじゃん。
  UpdateWindow() しても WM_PAINT が来るとは限りませんし、
UpdateWindow() しなくたってWM_PAINT は来ます。タスクバーにある
「すべて最小化」でもクリックして SPY でもしてごらん。

 画面への描画はカーネルが「描け」と言われたときに「描く」ものです。
描きたいときに描くものだったら、画面グチャグチャですよ。

 だから、
> Windows API って読めるんですか :-p

 この程度の揚げ足取りしか反論できないんですね。
Windows Application Programming Interface を読みなさいってどこが
いけないのでしょうかね。昔じゃ、Windows プログラマにとっては
これが聖書みたいなもんだけどね。いまじゃ MSDN の隅っこに追いやられて
ほとんど英語版しか存在しないから、読んでいても それが Windows API 
だってことに気づかないんでしょうね。(^^)