WIN32 アプリケーションがあります。そのメイン ウィンドウはhwndMainで、その子ウィンドウの 1 つは ですhwndView。には 1 つのタブ コントロールがありhwndTabますhwndView。
サイズを変更するとhwndMain、サイズが変更され、hwndViewサイズも変更されますhwndTab。少しちらつきますが、それほどではありません。
WS_EX_COMPOSITEDスタイル ( forhwndViewまたは)を使用しようとしましhwndTabたが、空白のウィンドウが表示されました。使用WS_EX_TRANSPARENTしてみましたが、ちらつきは解決しましたが、ウィンドウのサイズを大きくすると、子の更新が非常に遅くなります。たとえば、黒い領域が 1 秒間表示された後、領域が更新されます。
スタイルTreeViewを使用して、ちらつきの問題をうまく解決しました。WS_CHIPCHILDREN(以下の注釈を参照)。しかし、WS_CHIPCHILDRENstlye forを使用hwndViewしても、タブ コントロールのちらつきの問題は修正されません。
などにも注目しWM_ERASEBKGNDてNot set hbrBackgroundいます。
タブ コントロールにダブル バッファを使用したいのですが、そのためのチュートリアルが見つかりません。私が見つけたすべてのチュートリアルは次のWM_PAINTとおりです。しかし、 for でカスタム描画をしたくありません。タブコントロールにこの仕事を任せたいだけですが、最終結果のみを表示します。CompatibleDCCompatibleBitmapmemdcWM_PAINThwndTab
私は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。
hwndViewhwndTab実際には、タブ コントロールと、独自のダブル バッファと描画を持つ子の 2 つの子があります。これが の使用に問題を引き起こすかどうかはわかりませんWS_EX_COMPOSITED。
