Sdílet prostřednictvím


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 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.

  1. přidání ikony oznámení
  2. definování verze NOTIFYICONDATA
  3. definování vzhledu a obsahu oznámení
  4. Kontrola stavu uživatele
  5. zobrazení oznámení
  6. 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.

oznamovací oblasti obsahující tři ikony

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.

snímek obrazovky s bublinou oznámení označující, že je napájení baterie nízké

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).

Shell_NotifyIcon

Shell_NotifyIconGetRect

NOTIFYICONDATA

SHQueryUserNotificationState

IUserNotification

IUserNotification2

hlavního panelu

rozšíření hlavního panelu