Странные черные пиксели в углах элементов управления CProgressCtrl - PullRequest
1 голос
/ 03 января 2012

У меня есть диалоговое окно MFC (фактически диалоговое окно с диалоговым окном), которое содержит индикатор выполнения с этими странными черными пикселями в углу.Я пробовал следующее, чтобы удалить их:

  • Изменить большинство стилей типа границы и прозрачный стиль элемента управления.
  • Переопределить OnEraseBkgnd в классе, производном CProgressCtrl.
  • Установка цвета фона элемента управления с помощью PBM_SETBKCOLOR.

Мне еще предстоит найти способ удалить эти черные пиксели.

Вот пример того, что этовыглядит так:

enter image description here

Ответы [ 2 ]

1 голос
/ 04 января 2012

Кажется, я нашел проблему.Когда индикатор выполнения выполняет рисование, он отправляет сообщение WM_ERASEBKGND в диалоговое окно, чтобы получить фон, на котором он будет рисовать.Кое-как портится происхождение кисти DC.Использование следующего кода в начале функции, похоже, решило проблему без вредных последствий.

CRect rcClip;
pDC->GetClipBox(rcClip);
pDC->SetBrushOrg(-rcClip.left, -rcClip.top);
0 голосов
/ 04 января 2012

Я видел, как это происходит при использовании элементов управления ActiveX внутри контейнеров элементов управления, у которых нет окна или правильного контекста устройства (один из них - элемент управления фреймом VB6), но я не уверен, относится ли та же проблема к MFC окна и элементы управления, хотя.

Попробуйте сделать родительский элемент управления обычным статическим окном.

...