Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

Проблема замены изображения кнопки "Пуск" в Windows 2000   Найти похожие ветки 

 
Виталий17   (2004-12-14 11:54) [0]

Здравствуйте! Обнаружил, что в Win 2000 не удается сменить изображение на кнопке "Пуск" при помощи функции API
SendMessage(StartBtn, BM_SETIMAGE, 0, NewImage), StartBtn - хендл кнопки "Пуск" (хендл правильный, проверял в WinSight32), NewImage - хендл нового битмапа. В чем же дело? Кнопка не ловит сообщение
BM_SETIMAGE? Помогите советом, пожалуйста.


 
DVM ©   (2004-12-14 12:23) [1]


> Кнопка не ловит сообщение
> BM_SETIMAGE?

точнее обрабатывает и плюет на него. Все рисуется в обработчике WM_PAINT вероятно.
А все хозяйство (NewImage и прочее) в том же адресном пространстве что и кнопка?


 
Виталий17   (2004-12-14 17:50) [2]

Нет, NewImage лежит в другом адресном пространстве, кстати старый битмап тоже в другом.
Интересен такой момент: при посылке хендла нового изображения кнопке(а хендл старого битмапа запоминаем), она окрашивается обычным серым цветом. Посылаем кнопке хендл старого битмапа(запомненный) - рисунок кнопки восстанавливается. Что это значит? WM_PAINT проверяет описатель модуля из которого загружен битмап(по-видимому, Explorer.exe, Shell32.dll или другой файл)? Или есть другие мысли? Заранее спасибо за ответ.


 
DVM ©   (2004-12-14 17:59) [3]


> кстати старый битмап тоже в другом.

Другом это каком? Ничего не работает потому, что твоя картинка лежит не в адресном пространстве эксплорера, а в адресном пространстве твоей программы.


 
Виталий17   (2004-12-14 18:50) [4]

Покопался в Explorer.exe и Shell32.dll - там такой картинки нет. Символ Windows есть, но без надписи "Пуск". В то же время надпись не является текстом(проверял через GetWindowTextLength), т.е. символ+надпись - все-таки картинка(если конечно, текст не рисуется в WM_PAINT). Может есть ещё какие ни-ть dll-ки с рисунками?
И какое решение может быть в целом?


 
z007   (2004-12-14 23:11) [5]

>>если конечно, текст не рисуется в WM_PAINT
Текст пишется.
Само слово "Пуск" (в XP - "пуск" берется из ресурсов explorer"а
- строка #578)
Дальше - не знаю: нет у меня Win 2000 :)


 
DVM ©   (2004-12-15 11:09) [6]


> Текст пишется.

Точнее рисуется. Кнопка похоже OwnerDraw.


 
Виталий17   (2004-12-15 21:41) [7]

>Само слово "Пуск" (в XP - "пуск" берется из ресурсов explorer"а
>- строка #578)
>Дальше - не знаю: нет у меня Win 2000 :)

Действительно, строка 578 - для темы Windows XP, строка 595 - для классической темы. В Win 2000 только строка 578.
Т.е. придется ставить HOOK(прошу прощения за глупые вопросы - только изучаю Win API), ловить WM_PAIN и рисовать ручками. Но по идее, HOOK должен подтормаживать систему. Есть ли другой, менее ресурсоемкий способ?



Страницы: 1 вся ветка

Текущий архив: 2005.02.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.052 c
14-1106046524
WondeRu
2005-01-18 14:08
2005.02.06
Так когда появится конфернция по .NET?


14-1106164650
тихий вовочка
2005-01-19 22:57
2005.02.06
лохотрон


1-1105983132
serko
2005-01-17 20:32
2005.02.06
CheckBox


14-1105905333
Константинов
2005-01-16 22:55
2005.02.06
Обнаружил у себя вирус!


6-1101480819
User1
2004-11-26 17:53
2005.02.06
Помогите c конвертированием строки