WIN32 アプリケーションがあります。そのメイン ウィンドウはhwndMain
で、その子ウィンドウの 1 つは ですhwndView
。には 1 つのタブ コントロールがありhwndTab
ますhwndView
。
サイズを変更するとhwndMain
、サイズが変更され、hwndView
サイズも変更されますhwndTab
。少しちらつきますが、それほどではありません。
WS_EX_COMPOSITED
スタイル ( forhwndView
または)を使用しようとしましhwndTab
たが、空白のウィンドウが表示されました。使用WS_EX_TRANSPARENT
してみましたが、ちらつきは解決しましたが、ウィンドウのサイズを大きくすると、子の更新が非常に遅くなります。たとえば、黒い領域が 1 秒間表示された後、領域が更新されます。
スタイルTreeView
を使用して、ちらつきの問題をうまく解決しました。WS_CHIPCHILDREN
(以下の注釈を参照)。しかし、WS_CHIPCHILDREN
stlye forを使用hwndView
しても、タブ コントロールのちらつきの問題は修正されません。
などにも注目しWM_ERASEBKGND
てNot set hbrBackground
います。
タブ コントロールにダブル バッファを使用したいのですが、そのためのチュートリアルが見つかりません。私が見つけたすべてのチュートリアルは次のWM_PAINT
とおりです。しかし、 for でカスタム描画をしたくありません。タブコントロールにこの仕事を任せたいだけですが、最終結果のみを表示します。CompatibleDC
CompatibleBitmap
memdc
WM_PAINT
hwndTab
私はC#、Netなどの知識がないので、誰かが言語でタブコントロールをダブルバッファリングする方法の小さな例を示してもらえますか(これでタブコントロールのちらつきの問題が修正されると思われる場合) c
。winapi
.
備考: 私の TreeView では、 window の子ですhwndContainer
。次のように作成されます。
win->hwndContainer = CreateWindowEx(
WS_CLIPCHILDREN,
_T("SUMATRA_PDF_TOCBOX"), NULL,
WS_CHILD,
0, 0, gGlobalPrefs.sidebarDx, 0,
win->hwndPanel, NULL,
ghinst, NULL);
ダブルバッファを使用WS_CLIPCHILDREN
していなくても、ちらつきを修正します。WS_CLIPCHILDREN
しかし、最初のパラメーターの位置に置くのは奇妙
です。WS_CHILD の後に置くと、つまり
win->hwndContainer = CreateWindowEx(
NULL,
_T("SUMATRA_PDF_TOCBOX"), NULL,
WS_CHILD | WS_CLIPCHILDREN,
0, 0, gGlobalPrefs.sidebarDx, 0,
win->hwndPanel, NULL,
ghinst, NULL);
、その後もちらつきが発生します。
そのため、作成時に最初の方法も使用しようとしましたhwndView
が、空白の白いウィンドウが表示されました。私はこれらのものと本当に混乱しています。
を使ったときの空白の窓の写真WS_EX_COMPOSITED
ですhwndView
。に使用したところ、そのような問題はありませんhwndContainer
。
hwndView
hwndTab
実際には、タブ コントロールと、独自のダブル バッファと描画を持つ子の 2 つの子があります。これが の使用に問題を引き起こすかどうかはわかりませんWS_EX_COMPOSITED
。