Tab Control 在 Enter 键上绘制
Posted
技术标签:
【中文标题】Tab Control 在 Enter 键上绘制【英文标题】:Tab Control draw on Enter Key 【发布时间】:2013-04-22 19:14:57 【问题描述】:所以我有一个问题,我认为之前已经探索过,但我似乎找不到任何东西。我制作了一个完全自定义绘制的自定义选项卡控件类,并在用户单击不同选项卡时显示/隐藏 CDialog 对象。为此,我重载了paint方法(我没有使用用户绘制功能)。除了一个问题外,一切似乎都运行良好,我遇到的问题是,当用户在当前显示的对话框中选择其中一个控件(即 CEdit)并按下回车键时,tabCtrl 将收到一个 WMPAINT导致 tabCtrl 的主体被绘制在当前对话框上的消息。为了解决这个问题,我修改了 tabCtrl 的擦除背景方法以显示当前对话框,该对话框修复了对话框被绘制的问题,但是每次按下或按住 enter 键时,由于绘制/显示,我在控件中闪烁对话组合发生。我想知道是否有人以前处理过这个问题并有修复或任何想法。我一直无法想出任何有效的方法。抱歉缺少代码,我没有得到所有者的许可来分享它。
【问题讨论】:
【参考方案1】:双缓冲可能会对您有所帮助。请谷歌它 - 有很多例子。以this article为起点
【讨论】:
感谢您的建议,但这不是双缓冲问题。双缓冲解决了绘画算法中滞后产生的闪烁,这与此无关。由于重叠控件的绘制方式,闪烁正在发生。每次在其子控件之一上按下 enter 键时,tabctrl 都会收到一条 wmpaint 消息,这会导致它重新绘制并且重新绘制覆盖可见对话框。 看起来您的选项卡控制矩形与其中的页面一样大。仅供参考,绝对没有理由这样做。 MFC 中的选项卡控件与其他语言(如 VB 或 C++Builder)中的选项卡控件不同。它们只是选项卡控件。这意味着当它们的大小应该只是选项卡的大小并且不应该包括页面时 我确实让选项卡控件占据了其中页面的整个区域。我从来没有考虑过缩小它。选项卡控件在它为页面定义的区域周围绘制一个边框,如果我认为正确的话,通过缩小它你会松开那个边框吗?选项卡控件还有一个查找 pageRect 的 GetTabPageRect() 方法,如果选项卡控件不包含页面区域,则此函数将无用...这是处理选项卡控件的一种有趣方式,但似乎它会起作用。不填充 tabControl 的页面区域使其透明,你怎么看?以上是关于Tab Control 在 Enter 键上绘制的主要内容,如果未能解决你的问题,请参考以下文章