Értesítések és értesítési terület
Az értesítési terület a tálca egy része, amely ideiglenes forrást biztosít az értesítésekhez és az állapothoz. Emellett ikonok megjelenítésére is használható olyan rendszer- és programfunkciókhoz, amelyek nincsenek jelen az asztalon, például az akkumulátor töltöttségi szintje, a hangerő-vezérlés és a hálózat állapota. Az értesítési területet korábban rendszertálcaként vagy állapotterületként ismerték.
Ez a témakör a következő szakaszokat tartalmazza:
- értesítési és értesítési terület irányelvei
-
Értesítési létrehozása és megjelenítése
- Értesítés ikon hozzáadása
- A NOTIFYICONDATA verzió meghatározása
- Az értesítés megjelenésének és tartalmának meghatározása
- Felhasználói állapot ellenőrzése
- Értesítési megjelenítése
- Ikon eltávolítása
- SDK-minta
- Kapcsolódó témakörök
Értesítési és értesítési terület irányelvei
A Értesítések és Értesítési területWindows felhasználói élmény interakciós útmutatójának szakaszában találja az értesítések és az értesítési terület használatának ajánlott eljárásait. A cél az, hogy a felhasználói előnyöket az értesítések megfelelő használatával biztosítsuk, anélkül, hogy zavaró vagy zavaró lenne.
Az értesítési terület nem kritikus fontosságú információkra szolgál, amelyeket azonnal el kell végezni. Emellett nem gyorsprogram- vagy parancshozzáférésre szolgál. A Windows 7-hez képest ennek a funkciónak a nagy része az alkalmazás tálcáján keresztül érhető el a legjobban.
A Windows 7 lehetővé teszi a felhasználó számára, hogy ha úgy dönt, letiltsa az alkalmazás összes értesítését, ezért az átgondolt értesítéstervezés és -használat arra készteti a felhasználót, hogy az alkalmazás továbbra is megjelenítse őket. Az értesítések megszakítást jelentenek; győződjön meg arról, hogy megérik.
A Windows 7 bevezeti a "csendes idő" fogalmát. A csendes idő azt az első órát határozza meg, amikor egy új felhasználó bejelentkezik a fiókjába első alkalommal, vagy az operációs rendszer frissítése vagy a tiszta telepítés után először. Ez az idő arra van félretéve, hogy lehetővé tegye a felhasználó számára, hogy felfedezzék és megismerjék az új környezetet anélkül, hogy az értesítések zavarják. Ez idő alatt a legtöbb értesítés nem küldhető el és nem jeleníthető meg. A kivételek közé tartoznak azok a visszajelzések, amelyeket a felhasználó egy felhasználói műveletre válaszul vár, például amikor usb-eszközhöz csatlakozik, vagy kinyomtat egy dokumentumot. A csendes időre vonatkozó API-specifikusakat a jelen témakör későbbi részében tárgyaljuk.
Értesítés létrehozása és megjelenítése
A témakör többi szakasza ismerteti az alapvető eljárást, amely az alkalmazásból érkező értesítések felhasználónak való megjelenítéséhez követendő.
- Értesítés ikon hozzáadása
- A NOTIFYICONDATA verzió meghatározása
- Az értesítés megjelenésének és tartalmának meghatározása
- Felhasználói állapot ellenőrzése
- Értesítési megjelenítése
- Ikon eltávolítása
Értesítési ikon hozzáadása
Az értesítés megjelenítéséhez ikonnal kell rendelkeznie az értesítési területen. Bizonyos esetekben, például a Microsoft Communicator vagy az akkumulátor töltöttségi szintje, ez az ikon már jelen lesz. Sok más esetben azonban csak addig fog ikont hozzáadni az értesítési területhez, amíg az értesítés megjelenítéséhez szükség van rá. Ez mindkét esetben a Shell_NotifyIcon függvénnyel történik. Shell_NotifyIcon lehetővé teszi ikon hozzáadását, módosítását vagy törlését az értesítési területen.
Ha egy ikont ad hozzá az értesítési területhez a Windows 7 rendszeren, az alapértelmezés szerint az értesítési terület túlcsordulási szakaszához lesz hozzáadva. Ez a terület aktív, de az értesítési területen nem látható értesítési terület ikonokat tartalmaz. Csak a felhasználó előléptethet egy ikont a túlcsordulástól az értesítési területre, bár bizonyos körülmények között a rendszer ideiglenesen előléptethet egy ikont az értesítési területre rövid előzetes verzióként (egy perc alatt).
Jegyzet
A felhasználónak rendelkeznie kell a végső mondanivalóval, hogy mely ikonokat szeretné látni az értesítési területen. Mielőtt nem átmeneti ikont telepítene az értesítési területen, engedélyt kell kérnie a felhasználótól. Meg kell adni nekik azt a lehetőséget is (általában a helyi menüt), hogy eltávolítsák az ikont az értesítési területről.
A NOTIFYICONDATA a Shell_NotifyIcon hívásában küldött struktúra olyan információkat tartalmaz, amelyek az értesítési terület ikonját és magát az értesítést is meghatározzák. Az alábbiakban az értesítési terület ikonja látható, amely NOTIFYICONDATAsegítségével állítható be.
- Az az erőforrás, amelyből az ikon készült.
- Az ikon egyedi azonosítója.
- Az ikon elemleírásának stílusa.
- Az ikon állapota (rejtett, megosztott vagy mindkettő) az értesítési területen.
- Az ikonhoz társított alkalmazásablak fogópontja.
- Visszahívási üzenet azonosítója, amely lehetővé teszi az ikon számára, hogy az ikon határoló téglalapjában és ballonos értesítésében előforduló eseményeket közölje a társított alkalmazásablakkal. Az ikon határoló téglalapja Shell_NotifyIconGetRectkeresztül kérhető le.
Az értesítési terület minden ikonja kétféleképpen azonosítható:
- Az a GUID, amellyel az ikon deklarálva van a beállításjegyzékben. Ez az előnyben részesített módszer Windows 7 és újabb rendszereken.
- Az értesítési terület ikonhoz társított ablak fogópontja, valamint egy alkalmazás által definiált ikonazonosító. Ezt a módszert Windows Vista és korábbi verziókban használják.
Az értesítési területen lévő ikonok elemleírással rendelkezhetnek. Az elemleírás lehet standard elemleírás (előnyben részesített) vagy alkalmazás által rajzolt, előugró felhasználói felület. Bár nincs szükség elemleírásra, ajánlott.
Az értesítési terület ikonjainak nagy DPI-vel kell rendelkeznie. Az alkalmazásoknak 16x16 képpontos ikont és 32x32 ikont is meg kell adniuk az erőforrásfájlban, majd a LoadIconMetric használatával biztosítják a megfelelő ikon betöltését és méretezését.
Az értesítési terület ikonért felelős alkalmazásnak kezelnie kell az ikonhoz tartozó egérkattintásokat. Amikor egy felhasználó a jobb gombbal az ikonra kattint, egy normál helyi menüt kell létrehoznia. A bal egérgombbal történő egyetlen kattintás eredménye azonban az ikon függvényétől függően változik. Meg kell jelenítenie, hogy a felhasználó mit várna el az adott tartalomhoz leginkább illő formában – egy előugró ablakban, egy párbeszédpanelen vagy magában a programablakban. Megjelenítheti például egy állapotikon állapotszövegét, vagy egy csúszkát a hangerő-vezérléshez.
A kattintásból származó előugró ablak vagy párbeszédpanel elhelyezését az értesítési területen a kattintás koordinátája közelében kell elhelyezni. A hely meghatározásához használja a CalculatePopupWindowPosition.
Az ikon értesítés megjelenítése nélkül is hozzáadható az értesítési területhez úgy, hogy csak a NOTIFYICONDATA ikonspecifikus tagjait definiálja (fentebb tárgyalt), és meghívja Shell_NotifyIcon az itt látható módon:
NOTIFYICONDATA nid = {};
// Do NOT set the NIF_INFO flag.
...
Shell_NotifyIcon(NIM_ADD, &nid);
Az ikont az értesítési területre is felveheti, és megjelenítheti az összes értesítést egy hívásban Shell_NotifyIcon. Ehhez folytassa a jelen témakör utasításaival.
A NOTIFYICONDATA verzió definiálása
A Windows előrehaladtával a NOTIFYICONDATA struktúra kibővült, hogy több tagot is bevonjon a további funkciók meghatározásához. Az állandók segítségével deklarálható, hogy a NOTIFYICONDATA melyik verzióját használja az értesítési terület ikonjával, hogy lehetővé tegye a visszamenőleges kompatibilitást. Hacsak nincs meggyőző ok erre, erősen ajánlott a Windows Vista rendszerben bevezetett NOTIFYICON_VERSION_4 verziót használni. Ez a verzió a teljes rendelkezésre álló funkciót biztosítja, beleértve az értesítési terület ikonjának azonosítását a regisztrált GUID-azonosítóval, a kiváló visszahívási mechanizmussal és a jobb akadálymentességgel.
Állítsa be a verziót a következő hívásokon keresztül:
NOTIFYICONDATA nid = {};
...
nid.uVersion = NOTIFYICON_VERSION_4;
// Add the icon
Shell_NotifyIcon(NIM_ADD, &nid);
// Set the version
Shell_NotifyIcon(NIM_SETVERSION, &nid);
Vegye figyelembe, hogy a Shell_NotifyIcon hívása nem jelenít meg értesítést.
Az értesítés megjelenésének és tartalmának meghatározása
Az értesítés a ballon elemleírás-vezérlő egy speciális típusa. Címet, szövegtörzset és ikont tartalmaz. Az ablakhoz hasonlóan a jobb felső sarokban található Bezárás gomb. Tartalmaz egy Beállítások gombot is, amely megnyitja az Értesítési terület ikonok elemét a Vezérlőpulton, amely lehetővé teszi a felhasználó számára, hogy megjelenítse vagy elrejtse az ikont, vagy csak ikon nélküli értesítéseket jelenítsen meg.
A NOTIFYICONDATA a Shell_NotifyIcon hívásban küldött struktúra olyan információkat tartalmaz, amelyek az értesítési terület ikonját és magát az értesítési buborékot is meghatározzák. Az alábbi elemek az értesítésre vonatkoznak, amelyek NOTIFYICONDATAkeresztül állíthatók be.
- Az értesítési buborékban megjelenítendő ikon, amelyet az értesítés típusa határoz meg. Megadhatja az ikon méretét, valamint az egyéni ikonokat is.
- Értesítés címe. Ennek a címnek legfeljebb 48 karakter hosszúnak kell lennie angol nyelven (a honosításhoz). A cím az értesítés első sora, és a betűméret, a szín és a súly használatával szétválasztja őket.
- Az értesítés törzsében használható szöveg. Ennek a szövegnek legfeljebb 200 karakter hosszúságúnak kell lennie angol nyelven (a honosításhoz).
- El kell-e vetni az értesítést, ha nem jeleníthető meg azonnal.
- Az értesítés időtúllépése. Ezt a beállítást a Windows Vista és a későbbi rendszerek figyelmen kívül hagyják a rendszerszintű akadálymentességi időtúllépési beállítás érdekében.
- Az értesítésnek tiszteletben kell-e tartania a csendes időt a NIIF_RESPECT_QUIET_TIME jelzőn keresztül.
Jegyzet
Az IUserNotification és IUserNotification2 interfészek Shell_NotifyIconkomponensobjektum-modell (COM) burkolói. Jelenleg azonban nem biztosítják a Shell_NotifyIcon keresztül elérhető teljes NOTIFYICON_VERSION_4 funkciót, beleértve a GUID használatát az értesítési terület ikonjának azonosításához.
A felhasználó állapotának ellenőrzése
A rendszer a SHQueryUserNotificationState függvényt használja annak ellenőrzésére, hogy a felhasználó csendes időben, távol van-e a számítógéptől, vagy nem megszakítható állapotban van-e, például bemutató módban. Az, hogy a rendszer megjeleníti-e az értesítést, attól függ, hogy ez az állapot-e.
Jegyzet
Ha az alkalmazás olyan egyéni értesítési módszert használ, amely nem használ Shell_NotifyIcon, IUserNotificationvagy IUserNotification2, akkor mindig explicit módon kell meghívnia SHQueryUserNotificationState annak megállapításához, hogy az adott időpontban megjelenjen-e az értesítési felhasználói felület.
A felhasználó távolról küldött értesítései megjelenítendő üzenetsorba kerülnek, de mivel nem tudja, hogy a felhasználó mikor fog visszatérni, vagy hogy az értesítés akkor is érvényes lesz-e, érdemes lehet később újra elküldeni az értesítést.
A csendes idő alatt küldött értesítéseket a rendszer nem veti el. A tervezési irányelvek azt kérik, hogy minden értesítés ne legyen figyelmen kívül hagyva. Nem igényelhetnek azonnali felhasználói műveletet. Ezért nincs olyan fontos értesítés, hogy felül kell bírálnia a csendes időt.
Az értesítés megjelenítése
Miután beállította a NOTIFYICONDATA verziót, és egy NOTIFYICONDATA struktúrában definiálta az értesítést, hívja meg a Shell_NotifyIcon az ikon megjelenítéséhez.
Ha az értesítési terület ikonja nincs jelen, hívja fel Shell_NotifyIcon az ikon hozzáadásához. Ezt az átmeneti és a nem átmeneti ikonok esetében is végezze el.
NOTIFYICONDATA nid = {}; ... Shell_NotifyIcon(NIM_ADD, &nid);
Ha az értesítési terület ikonja már jelen van, hívja meg Shell_NotifyIcon az ikon módosításához.
NOTIFYICONDATA nid = {}; ... Shell_NotifyIcon(NIM_MODIFY, &nid);
Az alábbi kód egy példa a NOTIFYICONDATAbeállítására és Shell_NotifyIconkeresztüli küldésére. Vegye figyelembe, hogy ez a példa egy GUID-on keresztül azonosítja az értesítés ikonját (a Windows 7-ben előnyben részesített).
// 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;
Ikon eltávolítása
Ha el szeretne távolítani egy ikont – például ha csak ideiglenesen adta hozzá az ikont egy értesítés közvetítéséhez – hívja fel Shell_NotifyIconaz itt látható módon. Ebben a hívásban csak minimális NOTIFYICONDATA szerkezetre van szükség, amely azonosítja az ikont.
NOTIFYICONDATA nid = {};
...
Shell_NotifyIcon(NIM_DELETE, &nid);
Jegyzet
Az alkalmazás eltávolításakor az értesítési terület ikonja továbbra is lehetőségként jelenhet meg a felhasználó számára a Vezérlőpult Értesítési terület ikonok lapján, legfeljebb hét napig. Az ott végrehajtott módosításoknak azonban nincs hatása.
SDK-minta
A Shell_NotifyIconhasználatára vonatkozó teljes példáért tekintse meg a NotificationIcon minta mintát a Windows Szoftverfejlesztői Készletben (SDK).
Kapcsolódó témakörök