2012-01-03 24 views
1

我有一个MFC对话框(实际上是一个对话框中的对话框),其中包含一个进度条,这些奇怪的黑色像素在角落里。我试图删除它们:在CProgressCtrl控件的角落奇怪的黑色像素

  • 更改大多数边框类型样式和控件的透明样式。
  • 覆盖派生CProgressCtrl的类中的OnEraseBkgnd。
  • 通过PBM_SETBKCOLOR设置控件的背景颜色。

我还没有找到一种方法来删除这些黑色像素。

这里是什么样子的例子:

enter image description here

+0

我不知道如何从截图中反向工程代码。将展示此问题的最小示例项目发布到文件共享服务。 – 2012-01-03 21:10:22

+0

进度控制是对话资源提供的正常进度控制。对话框的OnEraseBackground如下: 'CRect rc; GetClientRect(RC);'' 如果(m_brBackground.GetSafeHandle()!){'' CBrush brBack;'' brBack.CreateSysColorBrush(COLOR_3DFACE);'' 了pdc-> FillRect(RC,&brBack);'' } else {' 'pDC-> FillRect(rc,&m_brBackground);' '}' – 2012-01-03 22:51:01

+0

另外,解释OnEraseBackground; m_brBackground成员是从位于程序资源中加载的位图创建的画笔。它仅在OnCtlColor中传递给静态控件,对于评论框来说这太大了:)。 – 2012-01-03 23:00:43

回答

1

看来我发现了这个问题。当进度条执行绘画时,它将WM_ERASEBKGND消息发送到对话框以获取它将绘制的背景。一些如何直流刷起源被搞砸了。在函数启动时使用下面的代码似乎已经解决了这个问题,没有不良影响。

CRect rcClip; 
pDC->GetClipBox(rcClip); 
pDC->SetBrushOrg(-rcClip.left, -rcClip.top); 
0

我已经看到了使用不具有AA窗口或适当的设备环境控制容器内的ActiveX控件,当发生这种情况(VB6的框架控制是其中之一),但我不确定是否同样的问题适用于MFC窗口和控件。

试着让控制父母成为一个正常的静态窗口。

+0

这没有多大意义。你在谈论无窗口的ActiveX控件吗? – 2012-01-03 21:11:11

+0

我认为是这样,我已经重新回答了我的答案(可能仍然不适用于这种情况下,我将删除它) – Deanna 2012-01-03 21:21:03

+0

没有涉及到ActiveX控件,控件的父级是对话框(通过对话框模板资源。 ) – 2012-01-03 22:55:10