Oznámení a oznamovací oblast
Oznamovací oblast je část hlavního panelu, která poskytuje dočasný zdroj pro oznámení a stav. Dá se také použít k zobrazení ikon pro systémové a programové funkce, které nemají na ploše žádný stav, jako je stav baterie, řízení hlasitosti a stav sítě. Oznamovací oblast byla historicky známá jako oznamovací oblast nebo stavová oblast.
Toto téma obsahuje následující části:
- pokyny k oznámením a oznamovací oblasti
-
vytvoření a zobrazení oznámení
- přidání ikony oznámení
- definování verze NOTIFYICONDATA
- definování vzhledu a obsahu oznámení
- Kontrola stavu uživatele
- zobrazení oznámení
- odebrání ikony
- Ukázková sady SDK
- související témata
Pokyny k oznamovací oblasti a oznamovací oblasti
Informace o osvědčených postupech při používání oznámení a oznamovací oblasti najdete v částech Oznámení a oznamovací oblasti Windows– Pokyny pro interakci s uživatelským prostředím systému Windows. Cílem je poskytnout uživatelům výhodu prostřednictvím vhodného používání oznámení, aniž by vás obtěžovalo nebo rušilo.
Oznamovací oblast není určená pro důležité informace, na které se musí okamžitě reagovat. Není také určen pro rychlý přístup k programu nebo příkazům. Od Windows 7 je většina této funkce co nejlépe dokončena prostřednictvím tlačítka hlavního panelu aplikace.
Systém Windows 7 umožňuje uživateli potlačit všechna oznámení z aplikace, pokud si zvolí, takže promyšlený návrh oznámení a použití bude klonit uživatele, aby aplikace mohla pokračovat v jejich zobrazení. Oznámení jsou přerušení; zajistit, že stojí za to.
Systém Windows 7 představuje koncept "tichého času". Ticho je definováno jako první hodina poté, co se nový uživatel přihlásí ke svému účtu poprvé nebo poprvé po upgradu operačního systému nebo čisté instalaci. Tentokrát je tato možnost vyhrazena, aby uživatel mohl prozkoumat a seznámit se s novým prostředím bez rušivých oznámení. Během této doby by se většina oznámení neměla posílat ani zobrazovat. Mezi výjimky patří zpětná vazba, kterou by uživatel očekával v reakci na akci uživatele, například když se připojí k zařízení USB nebo vytiskne dokument. Specifika rozhraní API týkající se tichého času jsou popsána dále v tomto tématu.
Vytvoření a zobrazení oznámení
Zbývající části v tomto tématu popisují základní postup, jak postupovat, aby se zobrazilo oznámení z vaší aplikace uživateli.
- přidání ikony oznámení
- definování verze NOTIFYICONDATA
- definování vzhledu a obsahu oznámení
- Kontrola stavu uživatele
- zobrazení oznámení
- odebrání ikony
Přidat ikonu oznámení
Pokud chcete zobrazit oznámení, musíte mít v oznamovací oblasti ikonu. V některých případech, například Microsoft Communicator nebo úroveň baterie, bude tato ikona již k dispozici. V mnoha dalších případech ale do oznamovací oblasti přidáte ikonu, pokud je potřeba k zobrazení oznámení. V obou případech se to provádí pomocí funkce Shell_NotifyIcon. Shell_NotifyIcon umožňuje přidat, upravit nebo odstranit ikonu v oznamovací oblasti.
Když se do oznamovací oblasti ve Windows 7 přidá ikona, ve výchozím nastavení se přidá do části přetečení oznamovací oblasti. Tato oblast obsahuje ikony oznamovací oblasti, které jsou aktivní, ale nejsou viditelné v oznamovací oblasti. Ikonu přetečení do oznamovací oblasti může zvýšit pouze uživatel, i když v určitých případech může systém dočasně zvýšit úroveň ikony do oznamovací oblasti jako krátký náhled (do jedné minuty).
Poznámka
Uživatel by měl mít poslední slovo, na kterých ikonách chce vidět v oznamovací oblasti. Před instalací ne přechodné ikony v oznamovací oblasti by měl být uživatel požádán o oprávnění. Měli by také mít možnost (obvykle i přes její místní nabídku), aby se ikona odebrala z oznamovací oblasti.
Struktura NOTIFYICONDATA odeslaná ve volání Shell_NotifyIcon obsahuje informace, které určují ikonu oznamovací oblasti i samotné oznámení. Níže jsou uvedené položky specifické pro samotnou ikonu oznamovací oblasti, které lze nastavit prostřednictvím NOTIFYICONDATA.
- Prostředek, ze kterého se ikona přebírá.
- Jedinečný identifikátor ikony.
- Styl popisu ikony
- Stav ikony (skrytý, sdílený nebo obojí) v oznamovací oblasti.
- Popisovač okna aplikace přidruženého k ikoně.
- Identifikátor zprávy zpětného volání, který umožňuje ikoně komunikovat události, ke kterým dochází v ohraničujícím obdélníku ikony a oznámení bubliny s přidruženým oknem aplikace. Ohraničující obdélník ikony lze načíst prostřednictvím Shell_NotifyIconGetRect.
Jednotlivé ikony v oznamovací oblasti lze identifikovat dvěma způsoby:
- Identifikátor GUID, se kterým je ikona deklarována v registru. Toto je upřednostňovaná metoda ve Windows 7 a novějších verzích.
- Popisovač okna přidruženého k ikoně oznamovací oblasti a identifikátor ikony definované aplikací. Tato metoda se používá v systému Windows Vista a dřívějších verzích.
Ikony v oznamovací oblasti můžou obsahovat popis. Popis může být buď standardní popis (preferovaný), nebo automaticky otevírané uživatelské rozhraní nakreslené aplikací. I když popisek není povinný, doporučuje se.
Ikony oznamovací oblasti by měly mít vysoké rozlišení DPI. Aplikace by měla ve svém souboru prostředků poskytnout ikonu 16 × 16 pixelů i ikonu 32x32 a pak použít LoadIconMetric zajistit, aby byla správně načtena a škálována správná ikona.
Aplikace odpovědná za ikonu oznamovací oblasti by měla zpracovat kliknutí myší na příslušnou ikonu. Když uživatel klikne pravým tlačítkem myši na ikonu, měl by se zobrazit normální místní nabídka. Výsledek jediného kliknutí s levým tlačítkem myši se ale bude lišit podle funkce ikony. Mělo by se zobrazit, co by uživatel očekával, aby se ve formuláři co nejlépe hodí pro daný obsah – automaticky otevírané okno, dialogové okno nebo samotné okno programu. Může například zobrazit stavový text ikony stavu nebo posuvník ovládacího prvku hlasitosti.
Umístění automaticky otevíraného okna nebo dialogového okna, které je výsledkem kliknutí, by se mělo umístit blízko souřadnice kliknutí v oznamovací oblasti. K určení umístění použijte CalculatePopupWindowPosition.
Ikonu lze přidat do oznamovací oblasti bez zobrazení oznámení definováním pouze členů specifických pro ikonu NOTIFYICONDATA (popsáno výše) a voláním Shell_NotifyIcon, jak je znázorněno zde:
NOTIFYICONDATA nid = {};
// Do NOT set the NIF_INFO flag.
...
Shell_NotifyIcon(NIM_ADD, &nid);
Můžete také přidat ikonu do oznamovací oblasti a zobrazit oznámení v jednom volání Shell_NotifyIcon. Pokud to chcete udělat, pokračujte pokyny v tomto tématu.
Definování verze NOTIFYICONDATA
Vzhledem k tomu, že Systém Windows postupoval, NOTIFYICONDATA strukturu rozšířil, aby zahrnovala více členů, aby bylo možno definovat více funkcí. Konstanty slouží k deklaraci verze NOTIFYICONDATA použít s ikonou oznamovací oblasti, aby byla zpětnou kompatibilitou. Pokud neexistuje přesvědčivý důvod k tomu, aby jinak, důrazně doporučujeme používat NOTIFYICON_VERSION_4 verzi, představené v systému Windows Vista. Tato verze poskytuje úplnou dostupnou funkci, včetně upřednostňované možnosti identifikace ikony oznamovací oblasti, i když registrovaný identifikátor GUID, vynikající mechanismus zpětného volání a lepší přístupnost.
Nastavte verzi pomocí následujících volání:
NOTIFYICONDATA nid = {};
...
nid.uVersion = NOTIFYICON_VERSION_4;
// Add the icon
Shell_NotifyIcon(NIM_ADD, &nid);
// Set the version
Shell_NotifyIcon(NIM_SETVERSION, &nid);
Všimněte si, že toto volání Shell_NotifyIcon nezobrazuje oznámení.
Definování vzhledu a obsahu oznámení
Oznámení je speciální typ ovládacího prvku popisku bubliny. Obsahuje název, základní text a ikonu. Podobně jako okno má v pravém horním rohu tlačítko Zavřít. Obsahuje také tlačítko Možnosti, které otevře položku Ikony oznamovací oblasti v Ovládacích panelech, což umožňuje uživateli zobrazit nebo skrýt ikonu nebo zobrazit pouze oznámení bez ikony.
Struktura NOTIFYICONDATA odeslaná ve volání Shell_NotifyIcon obsahuje informace, které určují ikonu oznamovací oblasti i samotnou bublinu oznámení. Níže jsou uvedené položky specifické pro oznámení, které lze nastavit prostřednictvím NOTIFYICONDATA.
- Ikona, která se zobrazí v bublině oznámení, která je určena typem oznámení. Velikost ikony je možné zadat i vlastní ikony.
- Název oznámení. Tento název by měl mít délku maximálně 48 znaků v angličtině (pro lokalizaci). Název je první řádek oznámení a odděluje se použitím velikosti písma, barvy a tloušťky.
- Text pro použití v textu oznámení Tento text by měl obsahovat maximálně 200 znaků v angličtině (pro lokalizaci).
- Jestli se má oznámení zahodit, pokud se nedá okamžitě zobrazit.
- Časový limit pro oznámení. Toto nastavení je ignorováno ve Windows Vista a novějších systémech ve prospěch nastavení časového limitu přístupnosti pro celý systém.
- Určuje, jestli má oznámení respektovat tichou dobu nastavenou příznakem NIIF_RESPECT_QUIET_TIME.
Poznámka
RozhraníIUserNotification a IUserNotification 2 jsou obálky modelu COM (Component Object Model) pro Shell_NotifyIcon. V tuto chvíli ale neposkytují úplné NOTIFYICON_VERSION_4 funkce dostupné přímo prostřednictvím Shell_NotifyIcon, včetně použití identifikátoru GUID k identifikaci ikony oznamovací oblasti.
Kontrola stavu uživatele
Systém používá funkci SHQueryUserNotificationState slouží ke kontrole, jestli je uživatel v tichém čase, mimo počítač nebo v nepřerušitelném stavu, jako je například prezentační režim. Jestli systém zobrazí vaše oznámení, závisí na tomto stavu.
Poznámka
Pokud vaše aplikace používá vlastní metodu oznámení, která nepoužívá Shell_NotifyIcon, IUserNotificationnebo IUserNotification2, měla by vždy explicitně volat SHQueryUserNotificationState určit, jestli má v tuto chvíli zobrazovat uživatelské rozhraní oznámení.
Oznámení odeslaná, když je uživatel pryč, se zařadí do fronty pro zobrazení, ale protože nevíte, kdy se uživatel vrátí nebo jestli bude oznámení stále platné, můžete později zvážit opětovné odeslání oznámení.
Oznámení odeslaná během tichého času se zahodí bez uzamčení. Pokyny pro návrh se ptají, že všechna oznámení jsou ignorovatelná. Neměli by vyžadovat okamžitou akci uživatele. Proto není žádné oznámení tak důležité, aby přepsaly tichou dobu.
Zobrazení oznámení
Jakmile nastavíte verzi NOTIFYICONDATA a definujete oznámení ve struktuře NOTIFYICONDATA, zavolejte Shell_NotifyIcon, aby se ikona zobrazila.
Pokud ikona oznamovací oblasti není k dispozici, zavolejte Shell_NotifyIcon a přidejte ikonu. Udělejte to u přechodných i ne přechodných ikon.
NOTIFYICONDATA nid = {}; ... Shell_NotifyIcon(NIM_ADD, &nid);
Pokud už ikona oznamovací oblasti existuje, zavolejte Shell_NotifyIcon a upravte ikonu.
NOTIFYICONDATA nid = {}; ... Shell_NotifyIcon(NIM_MODIFY, &nid);
Následující kód ukazuje příklad nastavení NOTIFYICONDATA data a jejich odeslání prostřednictvím Shell_NotifyIcon. Všimněte si, že tento příklad identifikuje ikonu oznámení prostřednictvím identifikátoru GUID (upřednostňovaný ve Windows 7).
// Declare NOTIFYICONDATA details.
// Error handling is omitted here for brevity. Do not omit it in your code.
NOTIFYICONDATA nid = {};
nid.cbSize = sizeof(nid);
nid.hWnd = hWnd;
nid.uFlags = NIF_ICON | NIF_TIP | NIF_GUID;
// Note: This is an example GUID only and should not be used.
// Normally, you should use a GUID-generating tool to provide the value to
// assign to guidItem.
static const GUID myGUID =
{0x23977b55, 0x10e0, 0x4041, {0xb8, 0x62, 0xb1, 0x95, 0x41, 0x96, 0x36, 0x69}};
nid.guidItem = myGUID;
// This text will be shown as the icon's tooltip.
StringCchCopy(nid.szTip, ARRAYSIZE(nid.szTip), L"Test application");
// Load the icon for high DPI.
LoadIconMetric(hInst, MAKEINTRESOURCE(IDI_SMALL), LIM_SMALL, &(nid.hIcon));
// Show the notification.
Shell_NotifyIcon(NIM_ADD, &nid) ? S_OK : E_FAIL;
Odebrání ikony
Pokud chcete odebrat ikonu , například když jste ikonu dočasně přidali k vysílání oznámení, zavolejte Shell_NotifyIcon, jak je znázorněno tady. Pouze minimální NOTIFYICONDATA strukturu, která identifikuje ikonu je potřeba v tomto volání.
NOTIFYICONDATA nid = {};
...
Shell_NotifyIcon(NIM_DELETE, &nid);
Poznámka
Když je aplikace odinstalována, její ikona oznamovací oblasti se může uživateli stále zobrazovat jako možnost na stránce Ikony oznamovací oblasti v Ovládacích panelech po dobu až sedmi dnů. Změny provedené v tomto případě však nebudou mít žádný vliv.
Ukázka sady SDK
Úplný příklad použití Shell_NotifyIconnajdete v ukázce ukázky NotificationI con v sadě Windows Software Development Kit (SDK).
Související témata