gpt4 book ai didi

c++ - 带有 WS_EX_COMPOSITED 的无闪烁选项卡控件

转载 作者:可可西里 更新时间:2023-11-01 10:01:37 32 4
gpt4 key购买 nike

我有一个使用 WTL 8.1 开发的适用于 Windows XP SP3 的 VS2008 C++ 应用程序。我的应用程序包含一个选项卡控件,它会在调整应用程序边框大小时闪烁。

我的窗口层次结构如下所示:

CFrameWindowImpl   CMainFrm
|-CSplitterWindow Splitter
|-CTabView Configuration Tabs
| |-CDialogImpl Configuration View 1
| |-CDialogImpl Configuration View 2
| |-CDialogImpl Configuration View 3
|-CDialogImpl Control View

我正在尝试的解决方案是制作 CFrameWindowImpl派生类使用 WS_EX_COMPOSITED样式及其下方的所有窗口都使用 WS_EX_TRANSPARENT风格。不幸的是,这会使选项卡控件按钮显示为空的黑条,并且任何配置 View 的控件根本不会显示。

如果我删除 WS_EX_COMPOSITEDWS_EX_TRANSPARENT样式,表单显示正确,但 CTabView调整大小时,它下面的所有内容都会可怕地闪烁。

我需要更改什么才能消除闪烁并正确绘制控件?

谢谢,保罗H


编辑: 得到它的工作。我删除了所有 WS_EX_TRANSPARENT根据 Mark Ransom 的建议样式。我把 WS_EX_COMPOSITED CTabCtrl 上的样式(包含在 CTabView 中)。其他控件根据需要通过 WTL::CDoubleBufferImpl<> 获得双缓冲.

最佳答案

窗口闪烁是因为它在绘制之前被删除。要消除这种情况,您需要完全禁用窗口删除并使用双缓冲 - 将窗口内容绘制到位图中,然后将位图复制到窗口中。因为位图包含了包括背景在内的全部内容,所以不再需要删除。

看起来 WS_EX_COMPOSITED 会自动处理双缓冲,但您仍然可能需要使用 NULL 背景画笔和/或处理 WM_ERASEBKGND 消息。

关于c++ - 带有 WS_EX_COMPOSITED 的无闪烁选项卡控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4188306/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com