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