Икони в «системния трей»
Следните полета - hWnd и UID - се използват за идентифициране иконата. Освен hWnd съответния прозорец приложение (обикновено, главен), и UID може да бъде произволен и се използва за разграничаване на икони. Ако активирате съобщение на уведомлението (uCallbackMessage, вижте. По-долу), тя ще бъде изпратена на този прозорец.
поле UFlags показва коя от останалите полета съдържат информация (комбинация от битови флагове):
- NIF_ICON - Икона
- NIF_MESSAGE - съобщение прозорец
- NIF_TIP - връх (подсказка)
- NIF_STATE - състояние (от версия 5)
- NIF_INFO - разширена подсказка (подсказка), който се появява в "балон» (балон)
- NIF_GUID - запазено за версия 6.
Невярно HICON - дръжката на иконата.
иконата в лентата показва размера на 16 * 16.
икони на ресурсите могат да включват няколко изображения с различни размери. Не забравяйте да добавите снимка 16 * 16 в живота си.
Невярно szTip - линейни карти до 64 (версия 5 - до 128) характер.
помощната линия е от тип TCHAR [], следователно, да се работи с него ще трябва да използвате преносими функции, както и най-важното е, че правилно да укажете размера, в символи, а не байта: sizeof (nid.szTip) / sizeof (nid.szTip [0])
обработка на събитие
Трей хваща събитията на мишката (започващи с версия 5, клавиатурата: контекстно меню) и ги изпраща до прозореца с PostMessage (hWnd, uCallbackMessage, (WPARAM) UID, (LPARAM) uMsg). Това означава, че ако задържите курсора на мишката върху иконата, ще бъдат прехвърлени WM_MOUSEMOVE втори параметър (LPARAM).
Съпътстващата информация (координати, ключове статус) се изпращат, и трябва да бъдат извлечени съответните WinAPI функции (GetCursorPos).
Заявлението може да избере всеки код за комуникация (uCallbackMessage), като правило, или броя на WM_USER + ..., WM_APP + ..., или регистрирани в системата, използвайки RegisterWindowMessage ().
Обикновено съобщение манипулатор
Context Menu прието да се покаже в отговор на десния бутон на мишката, която е WM_RBUTTONDOWN - WM_RBUTTONUP.
Има една тънкост: потребителят може да кликнете върху иконата и след това да отнеме бутона на мишката е освободена. След това натиснете отново, за да се върнете на мишката, за да се пусне. За иконите ще изглежда бавен кликване или малко съпротивление-н-капка. Общи за други случаи, изход - улавяне на мишката (:: SetCapture) не се прилага, така че всички действия се извършват от "нарастващ фронт": WM_xBUTTONDOWN (един клик), WM_xBUTTONDBLCLK (двойно кликване).
специални ефекти
Как да се покаже контекстно меню
Това се прави по същия начин, както във всеки друг случай. Единствената разлика - е, че координатите на мишката не се прехвърлят като част от съобщението, и те ще трябва да се вземат директно.
Ако не се обади SetForegroundWindow (hWnd), менюто не може да се затваря автоматично при натискане на бутон в чужбина.
Както можете да видите, нищо сложно.
Средствата се съхраняват "меню» (ленти с менюта), предназначени да бъдат вградени в прозореца. Ако той показва функция TrackPopupMenu, ще видим тясна вертикална лента, без текст.
Ето защо, трябва или да се създаде "изскачащи менюта" (изскачащи меню) функция CreatePopupMenu (), или да се подменю (което по дефиниция е "изскачащи прозорци"). Съответно, ресурс на менюто се появява като лента с един елемент (брой 0), в която всички функции се състои от под-менюта.
Как да се намали прозореца, за да системния трей
Перифразирам проблем: как да скриете прозореца, да се маха от бутона в лентата на задачите и да се покаже иконата в лентата?
Скриване на прозореца, като се обадите на ShowWindow с първия параметър SW_MINIMIZE, а след това - SW_HIDE.
Restore - SW_SHOW (в този случай тя се появява в лентата на задачите), а след това - SW_RESTORE (възстановена от минимизирано състояние).
Когато потребителят командва "срив" (натискане на бутон върху заглавната лента на прозореца, кликнете два пъти върху бутона в лентата със задачи, елемент от менюто на системата), съобщението се изпраща до параметър WM_SIZE SIZE_MINIMIZED. Водачът за това събитие може да се минимизира прозореца, за да системния трей.
По-долу е кодът на WinAPI. го прехвърля на MFC или Wtl - упражнение за читателя.
Опаковчици за икони
Obertkok задача - да се опрости работата с икона. Какво функционалност те може да поеме?
На първо място, API призовава за автоматизиране
- Попълване NOTIFYICONDATA структура
- Слой за API повиквания
- Актуализиране на икона при промяната на параметрите
- Изтегляне на икони от ресурси
На второ място, потребителят се премахва необходимостта от придаване на икона, за да потребителски прозорци:
- Създаване на обща (латентна) носител кутия
- Централизирано икона регистрация
На трето място, опростяване на събитията работа
- Централизирано регистрация на обработват събитие от икони
- лесен и гъвкав синтаксис боравене
И накрая, автоматизация на общи действия
- Посочете контекстното меню
- Намаляване на прозорците към табла
Пример за такава обвивка - Библиотека ShellIcons (написана от мен).
ShellIcons библиотека
ShellIcons написани на Visual C ++ с MFC и без използването на минимално използване на STL. Въпреки това, поради простотата на своята лесно прехвърлени към всяка технология.
Библиотеката е класа
- CShellIcon - увийте NOTIFYICONDATA структура
- CExtShellIcon. защитени CShellIcon - увийте икони, свързани с конкретен оператор.
- CExtShellIconHost - икони прототипи на превозни средства, черпени от прозореца
- CWinShellIconHost - медийни икони на прозореца е създаден с помощта на чист WinAPI
- _ShellIconNote - събитие манипулатор интерфейс
- CShellIconNote - просто изпълнение на манипулатор с виртуални методи "за всички поводи"
Абстрахиране от полето на медиите е направено, защото "пясък", използван за MFC и първото изпълнение на медиите е MFC-shnaya.
CShellIcon
CHideWindow може да минимизира прозореца, за да системния трей и го възстановите от там. Сгъваеми - по инициатива на клиента (каре прихваща минимизиране на събитието). Разгъване - с двойно кликване върху иконата.
Икона и текстови улики, взети от прозореца. Ако заглавието на прозореца се е променило, просто се обадете метод актуализация (), за да актуализирате иконите в системния трей.
Обект използва CWinShellIconHost медийни икони, което позволява, от една страна, за динамично разпределяне на номера икони, и второ, не сила на клиентите да се справят с техните собствени събития за уведомяване.
Пример използване. Диалог с иконата в системния трей.
Това е прост MFC-приложение, което показва всички техники, описани по-горе.
- Добавяне и промяна на иконите
- обработка на събитие
- Показва меню за бърз достъп
- Минимизиране на тавата
- Local (CShellIcon) и централизирани (CWinShellIconHost) Икони
Това е всичко.