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

 WASM Phorum —› WASM.WIN32 —› Как установить иконку окну?

. 1 . 2 . >>

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


Дата: Июл 8, 2004 05:08:20

Как правильно установить иконку окну?

Так:
(хотя есть мнение что маленькая иконка в этом случае не будет
загружена, но ведь работает и маленькая иконка устанавливается
в заголовок окна как положено!)
invoke LoadIcon, hInstance, 400
invoke PostMessage, hWnd, WM_SETICON, ICON_BIG, eax


Или так:
invoke LoadIcon,hInstance,400
invoke PostMessage,hDlg,WM_SETICON,ICON_BIG,eax
invoke LoadImage,hInstance,400,IMAGE_ICON,16,16,0
invoke PostMessage,hDlg,WM_SETICON,ICON_SMALL,eax


Или так:
invoke LoadIcon, hInstance, 400
mov hIcon, eax
invoke SendMessage, hDlg, WM_SETICON, ICON_SMALL, eax
invoke SendMessage, hDlg, WM_SETICON, ICON_BIG, hIcon


Другие варианты??


Дата: Июл 8, 2004 07:19:56

Другие варианты??
У Рихтера в "Создание эффективных WIN32-приложений
с учетом специфики 64-разрядной версии Windows" используется последний вариант.


Дата: Июл 8, 2004 14:43:55

Судя по MSDN, правильный второй вариант:
The LoadIcon() function loads the large icon member of an icon resource. To load the small icon, use the new LoadImage() function as follows:

LoadImage( hInstance,
MAKEINTRESOURCE(<icon identifier>),
IMAGE_ICON,
16,
16,
0);


Дата: Июл 8, 2004 15:45:11

> Судя по MSDN, правильный второй вариант

У меня такое ощущение что Windows лучше MSDN'а знает что и как ей грузить, и грузит маленькую иконку и большую правильно даже в первом варианте =)

Второй вопрос тут напрашивается такой, какую функцию использовать SendMessage или PostMessage, что есть правильнее?


Дата: Июл 8, 2004 17:33:37

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

ЗЫ: Если иконки запихнуты в *.ico правильно, то всё будет ОК. Например, ХР выберет полноцветные иконки вместо 256-цветных, если они там есть.


Дата: Июл 8, 2004 20:18:15

Four-F

Ага, глянул я твой MaskedEdit.asm, сам то ты делаешь по первому варианту но только с SendMessage ;-)

> т.к. момент в который иконка появится не имеет значения (юзер всё равно не заметит)

Заметит :-), иногда, при первом старте приложения(от момента загрузки винды) иконка появляется буквально на глазах, при последующих рестартах всё нормально :-)


Дата: Июл 9, 2004 02:17:54

q_q
> У Рихтера в "Создание эффективных WIN32-приложений
с учетом специфики 64-разрядной версии Windows" используется последний вариант.


В каком месте книги или в каком из исходников? Хотел глянуть...


Дата: Июл 9, 2004 03:55:37

Asterix
Рихтер Дж. Windows для профессионалов: создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows/Пер. с англ. - 4-е изд. - СПб: Питер; М.:Издательско-торговый дом "Русская редакция", 2001. - 752с.: ил.

Cтр. 707 или на прилагаемом CD файл CmnHdr.h
inline void chSETDLGICONS(HWND hwnd, int idi) {
  SendMessage(hwnd, WM_SETICON, TRUE,  (LPARAM) 
    LoadIcon((HINSTANCE) GetWindowLongPtr(hwnd, GWLP_HINSTANCE), 
      MAKEINTRESOURCE(idi)));
  SendMessage(hwnd, WM_SETICON, FALSE, (LPARAM) 
    LoadIcon((HINSTANCE) GetWindowLongPtr(hwnd, GWLP_HINSTANCE), 
      MAKEINTRESOURCE(idi)));
}


Дата: Июл 9, 2004 04:19:32

[ Asterix: ...сам то ты делаешь по первому варианту но только с SendMessage ;-) ]

Ага :) Я просто так глубоко не задумывался об этом. Если заметно, говоришь, то юзай SendMessage и дело с концом. И хрен то с ним, как там у Рихтера ;)


Дата: Июл 9, 2004 05:32:55

q_q

Спасибо, теперь нашёл, правда у меня Рихтер в chm ;-)

Four-F
> Я просто так глубоко не задумывался об этом.

Я наверно слишком "докапистый", то бишь люблю докопаться до истины ;-) Пытался подсмотреть у MS, но что-то нигде не встретилось в похожем варианте.. :-)


Дата: Июл 11, 2004 14:56:55

>и грузит маленькую иконку и большую правильно даже в первом варианте =)
Не грузит он её правильно. Иконка 32х32 загруженная первым вариантом, и отображаемая в таскбаре как small icon, искажается от масштабирования гораздо сильнее, чем загруженная вторым вариантом.


Дата: Июл 11, 2004 15:41:13 · Поправил: Asterix

cresta
Дык нужно чтоб в .ico было две иконки 32x32 и 16x16.


Дата: Июл 11, 2004 17:18:21

Asterix

Всё правильно, просто из логики вопроса я понял, что иконка всего одна. В этом случае второй вариант лучше. Если иконок - две,спору нет, работает одинаково :)


Дата: Июл 11, 2004 19:39:54

cresta
> Если иконок - две,спору нет, работает одинаково :)

А если четыре или более? ;-)


Дата: Июл 11, 2004 21:49:51

>А если четыре или более? ;-)
Не пробовал, надо поглядеть

. 1 . 2 . >>


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