我有一个 CTabCtrl 子类,我正在尝试覆盖 WM_PAINT 来执行自定义绘图。唯一的问题是,当我更改选定的选项卡时,我会在对话框中留下伪影,在新代码绘制在顶部之前,旧的绘制代码还没有被擦除。(标准选项卡控件使选定选项卡显示比未选定选项卡大 2 个像素,因此当您从选定选项更改为非选定选项时,您会留下以前的绘画工件)。
“重新粉刷”这个区域的最佳方法是什么?我尝试将父控件的 DC 和 BitBlt'ing 放到子 DC 上,但这不起作用,因为父 DC 已经包含此控件的图像。
我有一个 CTabCtrl 子类,我正在尝试覆盖 WM_PAINT 来执行自定义绘图。唯一的问题是,当我更改选定的选项卡时,我会在对话框中留下伪影,在新代码绘制在顶部之前,旧的绘制代码还没有被擦除。(标准选项卡控件使选定选项卡显示比未选定选项卡大 2 个像素,因此当您从选定选项更改为非选定选项时,您会留下以前的绘画工件)。
“重新粉刷”这个区域的最佳方法是什么?我尝试将父控件的 DC 和 BitBlt'ing 放到子 DC 上,但这不起作用,因为父 DC 已经包含此控件的图像。
您是否也覆盖了 WM_ERASEBACKGROUND 消息?您可能应该这样做并擦除控件中的区域。
如果您不想替换所有绘图逻辑,可以使用DrawThemeParentBackground来绘制背景(XP 及更高版本)。