Главная страница
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.025 c
1-1106507483
~METALLIST~
2005-01-23 22:11
2005.02.06
Как осуществлять поиск папок и файлов на диске???


10-1082362359
7th_Angel
2004-04-19 12:12
2005.02.06
Диаграммы в Excel


6-1100836706
Новичек
2004-11-19 06:58
2005.02.06
Создание сокета без сетевой карты.


14-1105909240
Profi
2005-01-17 00:00
2005.02.06
Опрос


14-1105670756
Думкин
2005-01-14 05:45
2005.02.06
С Днем Рождения! 14 января