Powiadomienia i obszar powiadomień
Obszar powiadomień to część paska zadań, która udostępnia tymczasowe źródło powiadomień i stanu. Można go również używać do wyświetlania ikon dla funkcji systemu i programu, które nie mają obecności na pulpicie, takich jak poziom baterii, sterowanie głośnością i stan sieci. Obszar powiadomień był historycznie znany jako obszar obszaru powiadomień lub obszaru stanu.
Ten temat zawiera następujące sekcje:
- wytyczne dotyczące powiadomień i powiadomień
-
tworzenie i wyświetlanie powiadomień
- dodawanie ikony powiadomień
- definiowanie wersji NOTIFYICONDATA
- definiowanie wyglądu i zawartości powiadomień
- Sprawdzanie stanu użytkownika
- Wyświetlanie powiadomień
- usuwanie ikony
- Przykładowy zestaw SDK
- Tematy pokrewne
Wytyczne dotyczące obszaru powiadomień i powiadomień
Zobacz sekcje Notifications and Notification Area (Obszar powiadomień) Wskazówki dotyczące interakcji środowiska użytkownika systemu Windows, aby uzyskać najlepsze rozwiązania dotyczące korzystania z powiadomień i obszaru powiadomień. Celem jest zapewnienie korzyści dla użytkowników dzięki odpowiedniemu użyciu powiadomień, bez denerwowania ani rozpraszania uwagi.
Obszar powiadomień nie jest przeznaczony dla informacji krytycznych, które muszą być natychmiast podjęte. Nie jest ona również przeznaczona do szybkiego dostępu do programu ani poleceń. Od systemu Windows 7 większość tej funkcji najlepiej wykonać za pomocą przycisku paska zadań aplikacji.
System Windows 7 umożliwia użytkownikowi pomijanie wszystkich powiadomień z aplikacji, jeśli wybierze, dlatego przemyślany projekt powiadomień i użycie skłoni użytkownika do umożliwienia aplikacji dalszego ich wyświetlania. Powiadomienia są przerywane; upewnij się, że są one warte.
System Windows 7 wprowadza pojęcie "cichego czasu". Czas cichy jest definiowany jako pierwsza godzina po zalogowaniu się nowego użytkownika na jego koncie po raz pierwszy lub po raz pierwszy po uaktualnieniu systemu operacyjnego lub czystej instalacji. Tym razem można pozwolić użytkownikowi na eksplorowanie i zapoznanie się z nowym środowiskiem bez rozpraszania uwagi powiadomień. W tym czasie większość powiadomień nie powinna być wysyłana ani wyświetlana. Wyjątki obejmują opinie, które użytkownik spodziewa się zobaczyć w odpowiedzi na akcję użytkownika, na przykład gdy podłącza urządzenie USB lub drukuje dokument. Szczegółowe informacje dotyczące interfejsu API dotyczące cichego czasu zostały omówione w dalszej części tego tematu.
Tworzenie i wyświetlanie powiadomienia
W pozostałych sekcjach w tym temacie opisano podstawową procedurę wykonywania, aby wyświetlić powiadomienie z aplikacji do użytkownika.
- dodawanie ikony powiadomień
- definiowanie wersji NOTIFYICONDATA
- definiowanie wyglądu i zawartości powiadomień
- Sprawdzanie stanu użytkownika
- Wyświetlanie powiadomień
- usuwanie ikony
Dodawanie ikony powiadomienia
Aby wyświetlić powiadomienie, musisz mieć ikonę w obszarze powiadomień. W niektórych przypadkach, takich jak Microsoft Communicator lub poziom baterii, ta ikona będzie już obecna. Jednak w wielu innych przypadkach do obszaru powiadomień zostanie dodana ikona tylko tak długo, jak jest to konieczne, aby wyświetlić powiadomienie. W obu przypadkach jest to realizowane przy użyciu funkcji Shell_NotifyIcon. Shell_NotifyIcon umożliwia dodawanie, modyfikowanie lub usuwanie ikony w obszarze powiadomień.
obszar powiadomień
Po dodaniu ikony do obszaru powiadomień w systemie Windows 7 jest on domyślnie dodawany do sekcji przepełnienia obszaru powiadomień. Ten obszar zawiera aktywne ikony obszaru powiadomień, ale nie są widoczne w obszarze powiadomień. Tylko użytkownik może podwyższyć poziom ikony z przepełnienia do obszaru powiadomień, chociaż w pewnych okolicznościach system może tymczasowo podwyższyć poziom ikony do obszaru powiadomień jako krótki podgląd (w ciągu jednej minuty).
Nuta
Użytkownik powinien mieć ostatni głos, na którym ikony chcą zobaczyć w obszarze powiadomień. Przed zainstalowaniem ikony nieoczyszczającej w obszarze powiadomień użytkownik powinien zostać poproszony o uprawnienie. Należy również podać opcję (zwykle, choć jej menu skrótów), aby usunąć ikonę z obszaru powiadomień.
Struktura NOTIFYICONDATA wysłana w wywołaniu do Shell_NotifyIcon zawiera informacje określające zarówno ikonę obszaru powiadomień, jak i samo powiadomienie. Poniżej przedstawiono te elementy specyficzne dla samej ikony obszaru powiadomień, którą można ustawić za pomocą NOTIFYICONDATA.
- Zasób, z którego jest pobierana ikona.
- Unikatowy identyfikator ikony.
- Styl etykietki narzędzia ikony.
- Stan ikony (ukryty, udostępniony lub oba) w obszarze powiadomień.
- Uchwyt okna aplikacji skojarzony z ikoną.
- Identyfikator komunikatu wywołania zwrotnego, który umożliwia ikonie komunikowanie zdarzeń występujących w obrębie prostokąta powiązanego ikony i powiadomienia balonowego ze skojarzonym oknem aplikacji. Prostokąt ograniczenia ikony można pobrać za pomocą Shell_NotifyIconGetRect.
Każda ikona w obszarze powiadomień można zidentyfikować na dwa sposoby:
- Identyfikator GUID, za pomocą którego ikona jest zadeklarowana w rejestrze. Jest to preferowana metoda w systemie Windows 7 lub nowszym.
- Uchwyt okna skojarzonego z ikoną obszaru powiadomień oraz identyfikator ikony zdefiniowanej przez aplikację. Ta metoda jest używana w systemie Windows Vista i starszych wersjach.
Ikony w obszarze powiadomień mogą mieć etykietkę narzędzia. Etykietka narzędzia może być standardową etykietką narzędzia (preferowaną) lub interfejsem użytkownika rysowanym przez aplikację. Chociaż etykietka narzędzia nie jest wymagana, zaleca się.
Ikony obszaru powiadomień powinny mieć wysoką rozdzielczość DPI. Aplikacja powinna podać ikonę 16x16 pikseli i ikonę 32x32 w pliku zasobu, a następnie użyć LoadIconMetric, aby upewnić się, że poprawna ikona jest załadowana i skalowana odpowiednio.
Aplikacja odpowiedzialna za ikonę obszaru powiadomień powinna obsługiwać kliknięcie myszą dla tej ikony. Gdy użytkownik kliknie prawym przyciskiem myszy ikonę, powinien wyświetlić normalne menu skrótów. Jednak wynik jednego kliknięcia z lewym przyciskiem myszy będzie się różnić w zależności od funkcji ikony. Powinien on wyświetlić, czego użytkownik spodziewa się zobaczyć w formularzu najlepiej dopasowanym do tej zawartości — okna podręcznego, okna dialogowego lub samego okna programu. Może na przykład wyświetlić tekst stanu dla ikony stanu lub suwak dla kontrolki głośności.
Umieszczenie okna podręcznego lub okna dialogowego, które wynika z kliknięcia, powinno zostać umieszczone w pobliżu współrzędnej kliknięcia w obszarze powiadomień. Użyj CalculatePopupWindowPosition, aby określić jego lokalizację.
Ikonę można dodać do obszaru powiadomień bez wyświetlania powiadomienia, definiując tylko elementy członkowskie specyficzne dla ikony NOTIFYICONDATA (omówione powyżej) i wywołując Shell_NotifyIcon, jak pokazano poniżej:
NOTIFYICONDATA nid = {};
// Do NOT set the NIF_INFO flag.
...
Shell_NotifyIcon(NIM_ADD, &nid);
Możesz również dodać ikonę do obszaru powiadomień i wyświetlić powiadomienie w jednym wywołaniu, aby Shell_NotifyIcon. W tym celu przejdź do instrukcji w tym temacie.
Definiowanie wersji NOTIFYICONDATA
W miarę postępu działania systemu Windows struktura NOTIFYICONDATA została rozszerzona, aby uwzględnić więcej elementów członkowskich w celu zdefiniowania większej funkcjonalności. Stałe służą do deklarowania wersji NOTIFYICONDATA do użycia z ikoną obszaru powiadomień w celu zapewnienia zgodności z poprzednimi wersjami. Chyba że istnieje przekonujący powód, aby zrobić inaczej, zdecydowanie zaleca się korzystanie z wersji NOTIFYICON_VERSION_4 wprowadzonej w systemie Windows Vista. Ta wersja zapewnia pełną dostępną funkcję, w tym preferowaną możliwość identyfikowania ikony obszaru powiadomień, choć zarejestrowany identyfikator GUID, lepszy mechanizm wywołania zwrotnego i lepszą dostępność.
Ustaw wersję za pomocą następujących wywołań:
NOTIFYICONDATA nid = {};
...
nid.uVersion = NOTIFYICON_VERSION_4;
// Add the icon
Shell_NotifyIcon(NIM_ADD, &nid);
// Set the version
Shell_NotifyIcon(NIM_SETVERSION, &nid);
Należy pamiętać, że to wywołanie Shell_NotifyIcon nie wyświetla powiadomienia.
Definiowanie wyglądu i zawartości powiadomienia
Powiadomienie jest specjalnym typem kontrolki etykietki narzędzia balonu. Zawiera tytuł, tekst treści i ikonę. Podobnie jak okno, ma przycisk Zamknij w prawym górnym rogu. Zawiera również przycisk Opcje, który otwiera element Ikony obszaru powiadomień w Panelu sterowania, który umożliwia użytkownikowi wyświetlanie lub ukrywanie ikony lub pokazywanie tylko powiadomień bez ikony.
Struktura NOTIFYICONDATA wysłana w wywołaniu do Shell_NotifyIcon zawiera informacje określające zarówno ikonę obszaru powiadomień, jak i sam dymek powiadomień. Poniżej przedstawiono te elementy specyficzne dla powiadomienia, które można ustawić za pomocą NOTIFYICONDATA.
- Ikona do wyświetlenia w dymku powiadomień, który jest określony przez typ powiadomienia. Można określić rozmiar ikony, a także ikony niestandardowe.
- Tytuł powiadomienia. Ten tytuł powinien mieć maksymalnie 48 znaków w języku angielskim (aby pomieścić lokalizację). Tytuł jest pierwszym wierszem powiadomienia i ustawionym przez użycie rozmiaru czcionki, koloru i wagi.
- Tekst do użycia w treści powiadomienia. Ten tekst powinien zawierać maksymalnie 200 znaków w języku angielskim (aby uwzględnić lokalizację).
- Czy powiadomienie powinno zostać odrzucone, jeśli nie można go wyświetlić natychmiast.
- Limit czasu powiadomienia. To ustawienie jest ignorowane w systemach Windows Vista i nowszych na rzecz ustawienia limitu czasu ułatwień dostępu dla całego systemu.
- Czy powiadomienie powinno uwzględniać cichy czas, ustaw flagę NIIF_RESPECT_QUIET_TIME.
Nuta
Interfejsy IUserNotification i IUserNotification2to otoki modelu obiektów składników (COM) dla Shell_NotifyIcon. Jednak w tej chwili nie zapewniają one pełnej NOTIFYICON_VERSION_4 funkcji dostępnej bezpośrednio za pośrednictwem Shell_NotifyIcon, w tym użycia identyfikatora GUID do identyfikowania ikony obszaru powiadomień.
Sprawdzanie stanu użytkownika
System używa funkcji SHQueryUserNotificationState służy do sprawdzania, czy użytkownik jest w cichym czasie, poza komputerem, czy w stanie nieinterrupowalnym, takim jak tryb prezentacji. To, czy system wyświetla powiadomienie, zależy od tego stanu.
Nuta
Jeśli aplikacja korzysta z niestandardowej metody powiadamiania, która nie używa Shell_NotifyIcon, IUserNotificationlub IUserNotification2, zawsze należy jawnie wywołać SHQueryUserNotificationState, aby określić, czy powinien wyświetlać interfejs użytkownika powiadomień w tym czasie.
Powiadomienia wysyłane, gdy użytkownik jest w kolejce do wyświetlania, ale ponieważ nie wiadomo, kiedy użytkownik zwróci lub czy powiadomienie będzie nadal ważne w tym czasie, możesz rozważyć ponowne wysłanie powiadomienia później.
Powiadomienia wysyłane w cichym czasie są odrzucane bez pokazu. Wytyczne dotyczące projektowania proszą o zignorowanie wszystkich powiadomień. Nie powinny wymagać natychmiastowej akcji użytkownika. W związku z tym żadne powiadomienie nie jest tak ważne, aby przesłonić cichy czas.
Wyświetlanie powiadomienia
Po ustawieniu wersji NOTIFYICONDATA i zdefiniowaniu powiadomienia w strukturze NOTIFYICONDATA wywołaj Shell_NotifyIcon, aby wyświetlić ikonę.
Jeśli ikona obszaru powiadomień nie jest obecna, wywołaj Shell_NotifyIcon, aby dodać ikonę. Zrób to zarówno dla ikon przejściowych, jak i nie przejściowych.
NOTIFYICONDATA nid = {}; ... Shell_NotifyIcon(NIM_ADD, &nid);
Jeśli ikona obszaru powiadomień jest już obecna, wywołaj Shell_NotifyIcon, aby zmodyfikować ikonę.
NOTIFYICONDATA nid = {}; ... Shell_NotifyIcon(NIM_MODIFY, &nid);
Poniższy kod przedstawia przykład ustawienia NOTIFYICONDATA danych i wysyłania ich za pośrednictwem Shell_NotifyIcon. Należy pamiętać, że w tym przykładzie jest identyfikowana ikona powiadomienia za pomocą identyfikatora GUID (preferowanego w systemie 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;
Usuwanie ikony
Aby usunąć ikonę — na przykład po dodaniu tylko ikony tymczasowej w celu emisji powiadomienia — wywołaj Shell_NotifyIcon, jak pokazano poniżej. W tym wywołaniu potrzebna jest tylko minimalna NOTIFYICONDATA struktura identyfikująca ikonę.
NOTIFYICONDATA nid = {};
...
Shell_NotifyIcon(NIM_DELETE, &nid);
Nuta
Po odinstalowaniu aplikacji jej ikona obszaru powiadomień może nadal być wyświetlana użytkownikowi jako opcja na stronie Ikony obszaru powiadomień w Panelu sterowania przez maksymalnie siedem dni. Jednak wszelkie wprowadzone zmiany nie będą miały żadnego wpływu.
Przykład zestawu SDK
Zobacz przykład NotificationIcon Sample w zestawie Sdk (Software Development Kit) systemu Windows, aby zapoznać się z pełnym przykładem użycia Shell_NotifyIcon.
Tematy pokrewne