· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Иконки в Status Bar'е

Посл.отвђт Сообщенiе


Дата: Янв 10, 2004 14:47:53

При установке иконки в Status Bar'е с помощью сообщения SB_SETICON возникают проблемы - иконка раздувается до размера 32x32, при этом сама иконка хранится в ресурсах и имеет размер 16x16. Вот текст написанной мною процедуры:
SetStatusIcon proc @hStatus:HWND,@ID:DWORD
invoke LoadIcon,APP.hInstance,@ID
invoke SendMessage,@hStatus,SB_SETICON,0,eax
ret
SetStatusIcon endp

Существует ли способ правильно вписать иконку в Status Bar стандартными средствами без сабклассинга и OWNERDRAWN элементов?
Ведь эксплорер это как то делает.


Дата: Янв 10, 2004 15:06:32

А что, эксплорер не через OWNERDRAWN делает? И почему нельзя OWNERDRAWN использовать - это пара строчек кода.


Дата: Янв 10, 2004 15:23:36 · Поправил: Julius

Это отнудь не пара строк кода. Ведь необходимо чтобы в соответствующей части Status Bar'а отображалась не только икнока, но также и текстовые сообщения - все это придется отрисовывать вручную (конечно это не 100 строк, но все же и не пара уж точно).
Иконки вставлять в Status Bar позволяет только библиотека comctl32.dll v4.71 и выше, поставляемая с эксплорером (если речь идет о Win95 - в ней устаревшая версия), значит поидее и обновленный Status Bar в ней должен такие вещи должен сам делать.
Но, это мое мнение если, я ошибаюсь буду рад узнать об этом.
С другой стороны зачем было бы делать сообщение SB_SETICON, если оно не правильно отображает иконки. Наверное, я просто что то не так делаю.


Дата: Янв 10, 2004 15:31:48

Julius
Какого размера твой statusbar?


Дата: Янв 10, 2004 15:38:21 · Поправил: Julius

Размер в высоту тот который сосздается по умолчанию.
23 или 24 пикселя кажется, вместе в Borders


Дата: Янв 10, 2004 15:48:50

Julius
Попробуй так:
SetStatusIcon proc @hStatus:HWND, @ID:DWORD 
  invoke LoadImage, APP.hInstance, @ID, IMAGE_ICON, 16, 16, 0
  invoke SendMessage,@hStatus,SB_SETICON,0,eax 
  ret
SetStatusIcon endp


Дата: Янв 10, 2004 15:52:32

Круто. Огромное спасибо!!! Все заработало.-))


Дата: Янв 10, 2004 15:58:01

Ну - пара это упрощенно, отрисовать текст это DrawText, нарисовать что-то ImageList_Draw. Вот и есть пара :) С ownerdraw все очень гибко можно сделать.


Дата: Янв 10, 2004 15:58:10

Julius
иконка хранится в ресурсах и имеет размер 16x16
Afaik должно работать даже если в ресурсах будет 32x32.


Дата: Янв 10, 2004 20:19:15

Хм, а у меня глюки. Может быть подскажете. Я создаю диалог и:
invoke CreateStatusWindow,WS_CHILD or WS_VISIBLE or \
SBS_SIZEGRIP,0, hWnd, 200
mov hStatus, eax
invoke LoadImage, hInstance, 104, IMAGE_ICON, 16, 16, 0
invoke SendMessage,hStatus,SB_SETICON,0,eax
Но не компилируется... Говорит, что SB_SETICON - неизвестно что! Я и сам в справке по Борланду не нашёл его. Не подскажите что такое?


Дата: Янв 10, 2004 21:29:48

SB_SETICON WM_USER+15


Дата: Янв 10, 2004 22:42:52 · Поправил: 1990

В смысле: SB_SETICON equ WM_USER+15 да?
ИЛИ я что-то не понял. Но в любом случае, даже еали я просто пихаю WM_USER+15 - результат нулевой. Иконка в статус баре не отображается. Может это потому, что я использую диалог, а не CreateWindow? Или что-то ещё.

Исправился ;)


Дата: Янв 10, 2004 23:01:01

В программе Styles показано как установить иконку в статус бар.


Дата: Янв 11, 2004 05:50:11

1990
Иконка в трее не отображается
Trey или statusbar?


_1877315588__SB_SETICONdemo.rar


Дата: Янв 11, 2004 11:08:42

Приношу извинения!
q_q
Описался - в статус баре. Бывает ;)

Спасибо за пример!


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.092