рисование под значками на рабочем столе
-
05-07-2019 - |
Вопрос
Я написал программу, которая рисует виджет на обоях рабочего стола, под значками рабочего стола, и все было хорошо.Но я обнаружил странную ошибку - моя программа не работала на некоторых других компьютерах - они отображали тот же рабочий стол без виджета после запуска.
Итак, есть ли у кого-нибудь какой-нибудь опыт, какие-то знания в этой области?Пожалуйста, помогите мне!:)
(Я не могу найти поблизости ни одного компьютера, где виджет не работал бы, на моем компьютере все работает хорошо.Я написал много тестовых программ, которые пытаются нарисовать что-либо на рабочем столе с помощью методов 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() как обычную краску (поверх обоев виртуального экрана, то есть такую же, как на рабочем столе) с суммированием цветов.
С уважением!:)