如何绘制儿童控制的透明区域?

我有一个CTabCtrl子类,我试图覆盖WM_PAINT执行自定义绘图。 唯一的问题是,当我更改选定的选项卡时,在新代码被绘制在顶部之前,旧对象中的旧绘制代码尚未被擦除的对话框中出现了工件。 (标准选项卡控件的选定选项卡显示比非选定选项卡大2个像素,因此当您从选定更改为未选定时,您将留下以前的油漆工件)。

什么是“重新粉刷”这个区域的最佳方式? 我已经尝试获得父控件的DC和BitBlt'ing到孩子的DC,但是这不起作用,因为父DC已经包含此控件的图像。

你是否覆盖了WM_ERASEBACKGROUND消息? 你应该这样做,并删除控制区域。

如果您不想替换所有绘图逻辑,可以使用DrawThemeParentBackground绘制背景(XP及更高版本)。