рисование под иконки на рабочем столе - PullRequest
7 голосов
/ 11 сентября 2009

Я написал программу, которая рисует виджет на обоях рабочего стола, под иконками рабочего стола, и все было хорошо. Но я обнаружил странную ошибку - моя программа не работала на некоторых других компьютерах - они отображают тот же рабочий стол без виджета после запуска.

Итак, у кого-нибудь есть опыт, какие-то знания в этой области? Пожалуйста, помогите мне! :)

(Я не могу найти компьютеры рядом, где виджет не работает, на моем компьютере все работает хорошо. Я написал много тестовых программ, чьи попытки рисовать что-либо на рабочем столе довольно методами, но на компьютерах моих друзей тест тоже ничего не показывает.)

Метод рисования:

Я написал dll, который находит окно рабочего стола (progman-> child-> child)) и создает ловушку и устанавливает собственную оконную процедуру для рабочего стола. В оконной процедуре я подключаю WM_ERASEBKGND:

case WM_ERASEBKGND:
  HDC hdc = (HDC)wparam;
  PaintDesktop(hdc);
  WidgetPaint(hdc);
  return 1;

// Я пропускаю этот код, получая и устанавливая области отсечения для быстрого рисования. (Я перепробовал все комбинации с отсечкой и без отсечения)

И в тестах я тоже пытался нарисовать виджет в сообщении WM_PAINT с такими же результатами - у меня все уже работает, но не у всех моих друзей.

обн: я решил это! :)

1 Ответ

4 голосов
/ 14 декабря 2009

Я решил это! Все просто было на 64-битных машинах) Поэтому я скомпилировал свой код для 64-битной системы, и виджет начал работать довольно хорошо!

А также -

PaintDesktop(hdc);

будет производить очень яркие обои в Windows7 (и Vista) с Aero. (Обои пользователя становятся ярче). Должно быть

CallWindowProc(OldWndProc, WM_ERASEBKGND, wparam, lparam);

Причина этого - Aero рассматривает PaintDesktop () как обычную краску (поверх обоев виртуального экрана, то есть на рабочем столе) с суммированием цвета.

Привет! :)

...