Вопрос

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

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

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

Способ рисования:

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

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

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

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

upd:Я решил эту проблему!:)

Это было полезно?

Решение

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

И, кроме того -

PaintDesktop(hdc);

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

CallWindowProc(OldWndProc, WM_ERASEBKGND, wparam, lparam);

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

С уважением!:)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top