Главная страница
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.029 c
14-1105971912
1008
2005-01-17 17:25
2005.02.06
Пиво опен сурс


3-1105198353
TechnoDreamer
2005-01-08 18:32
2005.02.06
Как программно изменить пароль на базе Access?


9-1099683392
Xenon
2004-11-05 22:36
2005.02.06
Как организовать перемещение


14-1105981281
Никита
2005-01-17 20:01
2005.02.06
Нужен набор компонентов которые косят под XP


3-1104410848
Некто
2004-12-30 15:47
2005.02.06
sqlcode codes and messages