いまどきMFC−CFormViewのリサイズとコントロールのちらつき

PFU Happy Hacking Keyboard Lite2 日本語配列かな印字なし USBキーボード ブラック PD-KB220B/U

PFU Happy Hacking Keyboard Lite2 日本語配列かな印字なし USBキーボード ブラック PD-KB220B/U

プログラムを作ろう!  MS VISUAL C++ 2010 入門 (MSDNプログラミングシリーズ)

プログラムを作ろう! MS VISUAL C++ 2010 入門 (MSDNプログラミングシリーズ)

  • ケース
    • CFormViewがリサイズされる(された)ときに中身のコントロールもリサイズ処理を行うとき
      • アレントダイアログ(CFormViewの中身となるダイアログ)とチャイルドコントロールのスタイルを変更することで大体解決する
      • WS_CLIPCHILDREN(必要に応じてWS_CLIPSIBLINGも)をスタイルに追加。以上。

この辺を検索すると、デバイスコンテキストやらビットマップやらをイジクリまわしてダブルバッファリングしろだのという記事や、SetRedrawを使えだとか、Invalidate()を使えだとかが最初山のように出てくるがほとんど必要ない。ほとんど嘘。
タブコントロールにリストをネストさせたときにこのスタイルがないことが原因でちらついて迷ったので書いておきます。
これはCWndから派生したクラスほとんどに適用できるケースでしょう。
MFCにおいて、ペアレントウィンドウとチャイルドウィンドウの関係から来る描画タイミングの複雑さをトレースすることほどドMなプレイはないのでやらないようにしましょう。ま、完全に自前でレンダリングするというのなら逆に気持ちがいいんですけどね。

  • そういえば・・
    • MFCのリソースエディタでUIのレイアウトを作れるが、このリソース情報がかかれているrcファイルの中では、座標やサイズがピクセル単位で記述されていない。昔から不便だなと思っていたがなぜこの仕様が残されているのだろうか?編集するには明らかにピクセル単位のほうがうれしいのだが・・