2012-01-03 32 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