Mfc 按Enter键绘制选项卡控件

Mfc 按Enter键绘制选项卡控件,mfc,tabcontrol,ctabctrl,Mfc,Tabcontrol,Ctabctrl,所以我有一个问题,我认为以前已经探讨过,但我似乎找不到任何关于它的东西。我创建了一个完全自定义绘制的自定义选项卡控件类,当用户单击不同的选项卡时显示/隐藏CDialog对象。为此,我重载了paint方法(我没有使用用户绘制的功能)。除了一个问题外,一切似乎都正常工作。我遇到的问题是,当用户在当前显示的对话框中选择一个控件(即CEdit)并按enter键时,tabCtrl将收到一条WMPAINT消息,导致tabCtrl的主体在当前对话框上绘制。为了解决这个问题,我修改了tabCtrl的erase

所以我有一个问题,我认为以前已经探讨过,但我似乎找不到任何关于它的东西。我创建了一个完全自定义绘制的自定义选项卡控件类,当用户单击不同的选项卡时显示/隐藏CDialog对象。为此,我重载了paint方法(我没有使用用户绘制的功能)。除了一个问题外,一切似乎都正常工作。我遇到的问题是,当用户在当前显示的对话框中选择一个控件(即CEdit)并按enter键时,tabCtrl将收到一条WMPAINT消息,导致tabCtrl的主体在当前对话框上绘制。为了解决这个问题,我修改了tabCtrl的erase background方法,以显示当前对话框,该对话框修复了对话框被绘制的问题,但由于绘制/显示对话框的组合,每次按下或按住enter键时,控件都会闪烁。我想知道是否有人曾经处理过这个问题,并有解决办法或任何想法。我还没能想出任何有效的办法。很抱歉缺少代码,我没有所有者的权限共享它。

双缓冲可能会帮助您。请用谷歌搜索——有很多例子。作为起点使用

感谢您的重复,但这不是双缓冲问题。双缓冲解决了绘制算法中的延迟所产生的闪烁,这与此无关。闪烁的发生是因为重叠控件的绘制方式。每次按下enter键时,tabctrl都会收到一条wmpaint消息,这会导致它重新绘制,并且重新绘制覆盖了可视对话框。看起来tab控件的矩形与其中的页面一样大。仅供参考,绝对没有理由这样做。MFC中的选项卡控件与其他语言(如VB或C++Builder)中的控件不同。它们只是选项卡控件。这意味着当它们的大小应该只是标签的大小,而不应该包括页面时,我会让标签控件占据其中页面的整个区域。我从未考虑过缩小它。tab控件在它为页面定义的区域周围绘制一个边框,如果我想的没错,通过缩小它,你会松开那个边框吗?tab控件还有一个查找pageRect GetTabPageRect()的方法,如果tab控件不包含页面区域,则此函数将是usless。。。这是治疗tabControls的一种有趣的方法,但似乎会奏效。不填充tabControl的页面区域以使其透明,您认为如何?