2009-09-11 2 views
7

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

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

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

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

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

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

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

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

upd: Я решил это! :)

+0

Работает ли ваш код в Windows XP и * не работает в Windows Vista или Windows 7? – MusiGenesis

+0

Да, мой код работает в XP и Windows Vista. Но copmletely не работает в Windows 7. В Windows 7, я полагаю, его механизм защиты. (Я даже не могу перечислить DLL-файлы, загруженные в процесс explorer.exe) – vsvasya

+1

Из любопытства, что было исправлением? – Brian

ответ

3

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

А также -

PaintDesktop(hdc); 

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

CallWindowProc(OldWndProc, WM_ERASEBKGND, wparam, lparam); 

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

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

+0

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

+0

Можете ли вы опубликовать более подробный ответ. Мне любопытно, как вы рисуете под значками рабочего стола. – Ampere

 Смежные вопросы

  • Нет связанных вопросов^_^