Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

трей и менюшка к иконке...

7.8K
22 мая 2007 года
Monarhia
105 / / 26.06.2006
[SIZE=1]Компилятор fasm[/SIZE]
Код:
.data
 node NOTIFYICONDATA
 szExit db "&Exit", 0
  hTrayMenu dd ?
  IDI_TRAY          = 1000
  IDM_EXIT       = 101    
...
.code
   mov    [node.cbSize],sizeof.NOTIFYICONDATA
   mov eax,[hwnd]
   mov    [node.hWnd],eax
   mov    [node.uID],IDI_TRAY
   mov    [node.uFlags],NIF_ICON+NIF_MESSAGE+NIF_TIP
 invoke   LoadIcon,NULL,IDI_APPLICATION
   mov    [node.hIcon],eax
   mov    dword[node.szTip],"prog"
   invoke Shell_NotifyIcon, NIM_ADD,node
...
.rsrc
directory   RT_ICON,icons,\
            RT_GROUP_ICON,group_icons,\
            RT_VERSION,versions
  resource icons,\
           1,LANG_NEUTRAL,icon_data,\
           2,LANG_NEUTRAL,tray_icon_data
  resource group_icons,\
           17,LANG_NEUTRAL,main_icon,\
           IDI_TRAY,LANG_NEUTRAL,tray_icon
  resource versions,\
           1,LANG_NEUTRAL,version
  icon main_icon,icon_data,'MAH2.ico'
  icon tray_icon,tray_icon_data,'DAH.ico'
Вобшем это накидал, но почемуто стандартная иконка показываетса как при IDI_WINLOGO... ещё бы помошь в создание меню ато както не выходит...
334
22 мая 2007 года
HexEdit
809 / / 27.07.2006
 
Код:
invoke LoadIcon, [wc.hInstance], 17
18K
22 мая 2007 года
un_named
60 / / 24.04.2007
При заполнении
"mov wc.hIcon,eax"
что используешь?
"invoke LoadIcon,NULL,IDI_APPLICATION" или первый параметр всё равно нулл? (второй может быть IDI_WINLOGO).
Если параметры правильные, то попробуй заново использовать LoadIcon, может глюк в другом месте искать надо (например wc.hIcon - не глобальная переменная и не передаётся в процедуру, где делаешь Shell_NotifyIcon).
Кроме того, если .code начинается именно так и wc.hIcon не заполнялась вообще... (т.е. LoadIcon вообще не вызывалась), то я не понимаю как ты этого хочеш добиться...

Вопрос "трей и менюшка к иконке" очень подробно описан Iczelion`ом в 23 уроке (глянь на wasm.ru):
при создании окна (сообщение WM_CREATE) делаешь так:
invoke CreatePopupMenu (создаешь это меню)
mov hPopupMenu,eax (заносишь его хэндл в переменную)
invoke AppendMenu,hPopupMenu,MF_STRING,IDM_RESTORE,addr RestoreString
invoke AppendMenu,hPopupMenu,MF_STRING,IDM_EXIT,addr ExitString (заполняешь меню строчками - пунктами меню).
А после того, как получишь сообщение указанное в uCallbackMessage (пользовательское сообщение, которое Windows отошлёт указанному в поле hwnd окну, в случае, когда над иконкой произойдёт событие мыши) - ловишь это сообщение в процедуре окна, проверяешь идёт ли оно от IDI_TRAY,
после этого проверяешь какое действие сделал пользователь, к примеру ловишь WM_RBUTTONDOWN,
вызываешь GetCursorPos, чтобы узнать текущие координаты курсора мыши. После возврата из функции, структура POINT содержит абсолютные координаты курсора.
Окно, которое будет получать уведомления от меню, ДОЛЖНО быть на переднем плане, так, что вызывай SetForegroundWindow, чтобы исправить эту проблему.
Дальше Икзелион советует: "После вызова SetForegroundWindow вы обнаружите, что в первый раз всплывающее меню сработает нормально, но при последующем появлении оно будет отображаться, а затем тут же исчезать. Как написано в MSDN, это сделано "намеренно". Необходимо переключить задачу на программу, являющуюся владельцем иконки в system tray. Этого можно добиться, отправив любое сообщение окну вашей программы. Но только используйте PostMessage, а не SendMessage!"
Т.е. после SetForegroundWindow, вызываешь меню:
invoke TrackPopupMenu,hPopupMenu,TPM_RIGHTALIGN,pt.x,pt.y,NULL,hWnd,NULL, при этом pt.x,pt.y - это координаты курсора; TPM_RIGHTALIGN - указание разместить меню слева от указанной точки.
А уже после всего этого вызываешь PostMessage, можно с нулями везде (например: PostMessage,hWnd,WM_NULL,0,0).
при всём при том, в конце, при уничтожении меню\окна\проги (короче WM_DESTROY), вызываешь
"invoke DestroyMenu,hPopupMenu".
и усё)))
удачи)))))
18K
22 мая 2007 года
un_named
60 / / 24.04.2007
Блин, как я долго писал, хексэдит меня обставил... я плачу)))))
7.8K
22 мая 2007 года
Monarhia
105 / / 26.06.2006
Интересно бум пробывать.... пасиб....!
334
22 мая 2007 года
HexEdit
809 / / 27.07.2006
Цитата: un_named
Блин, как я долго писал, хексэдит меня обставил... я плачу)))))


Да не плач :)
Ты все равно намного лучше меня ответил ;)

15K
01 июня 2007 года
vja
85 / / 09.01.2007
Цитата: un_named
...Дальше Икзелион...



а я всегда думал что по русски его ник звучит как айсзелион ^)

18K
01 июня 2007 года
un_named
60 / / 24.04.2007
Условимся на Iczelion и дело с концом)))))))))
Это зависит от того, кто как читает... а для айса на мой взгляд должна быть после первых двух еще буковка е: Icеzelion.

Мне дак всё-таки привычнее простая транскрипция без воспроизведения английской речи...
тем более этот товарищ вообще-то вроде француз:
http://win32assembly.online.fr/
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог