Dela via


Meddelanden och meddelandeområdet

Meddelandeområdet är en del av aktivitetsfältet som tillhandahåller en tillfällig källa för meddelanden och status. Den kan också användas för att visa ikoner för system- och programfunktioner som inte finns på skrivbordet, till exempel batterinivå, volymkontroll och nätverksstatus. Meddelandeområdet har historiskt sett kallats systemfältet eller statusområdet.

Det här avsnittet innehåller följande avsnitt:

Riktlinjer för meddelande- och meddelandeområde

Se avsnitten Notifications and Notification Area i Riktlinjer för interaktion med windows-användare för bästa praxis vid användning av meddelanden och meddelandeområdet. Målet är att ge användarfördelar genom lämplig användning av meddelanden, utan att vara irriterande eller distraherande.

Meddelandeområdet är inte till för viktig information som måste åtgärdas omedelbart. Den är inte heller avsedd för snabbprogram- eller kommandoåtkomst. Från och med Windows 7 utförs mycket av den funktionen bäst via ett programs knapp i aktivitetsfältet.

Med Windows 7 kan en användare ignorera alla meddelanden från ett program om de vill, så genomtänkt meddelandedesign och användning gör att användaren kan fortsätta att visa dem. Meddelanden är ett avbrott. se till att de är värda det.

Windows 7 introducerar begreppet "tyst tid". Tyst tid definieras som den första timmen efter att en ny användare loggar in på sitt konto antingen för första gången eller för första gången efter en uppgradering av operativsystemet eller en ren installation. Den här gången är avsatt för att låta användaren utforska och bekanta sig med den nya miljön utan distraktion av meddelanden. Under den här tiden bör de flesta meddelanden inte skickas eller visas. Undantag inkluderar feedback som användaren förväntar sig att se som svar på en användaråtgärd, till exempel när han eller hon ansluter en USB-enhet eller skriver ut ett dokument. API-detaljer om tyst tid beskrivs senare i det här avsnittet.

Skapa och visa ett meddelande

De återstående avsnitten i det här avsnittet beskriver den grundläggande proceduren som ska följas för att visa ett meddelande från ditt program för användaren.

  1. Lägg till en meddelandeikon
  2. Definiera NOTIFYICONDATA-versionen
  3. Definiera
  4. Kontrollera användarstatusen
  5. Visa
  6. tar bort en ikon

Lägg till en meddelandeikon

Om du vill visa ett meddelande måste du ha en ikon i meddelandefältet. I vissa fall, till exempel Microsoft Communicator eller batterinivå, kommer ikonen redan att finnas. I många andra fall lägger du dock till en ikon i meddelandefältet bara så länge som det behövs för att visa meddelandet. I båda fallen utförs detta med hjälp av funktionen Shell_NotifyIcon. Shell_NotifyIcon gör att du kan lägga till, ändra eller ta bort en ikon i meddelandefältet.

meddelandeområde som innehåller tre ikoner

När en ikon läggs till i meddelandefältet i Windows 7 läggs den som standard till i spillavsnittet i meddelandefältet. Det här området innehåller ikoner för meddelandeområdet som är aktiva, men som inte visas i meddelandefältet. Endast användaren kan höja upp en ikon från spillet till meddelandefältet, men under vissa omständigheter kan systemet tillfälligt flytta upp en ikon till meddelandefältet som en kort förhandsversion (under en minut).

Not

Användaren bör ha sista ord om vilka ikoner de vill se i meddelandefältet. Innan du installerar en icke-tillfällig ikon i meddelandefältet bör användaren uppmanas att ange behörighet. De bör också ges möjlighet (vanligtvis via snabbmenyn) att ta bort ikonen från meddelandefältet.

 

Den NOTIFYICONDATA- struktur som skickas i anropet till Shell_NotifyIcon innehåller information som anger både meddelandeområdesikonen och själva meddelandet. Följande är de objekt som är specifika för själva meddelandeområdesikonen som kan anges via NOTIFYICONDATA.

  • Den resurs som ikonen tas från.
  • En unik identifierare för ikonen.
  • Stilen på ikonens knappbeskrivning.
  • Ikonens tillstånd (dolt, delat eller båda) i meddelandefältet.
  • Handtaget för ett programfönster som är associerat med ikonen.
  • En identifierare för motringningsmeddelande som gör att ikonen kan kommunicera händelser som inträffar i ikonens rektangel för avgränsning och pratbubblan med det associerade programfönstret. Ikonens rektangel för avgränsning kan hämtas via Shell_NotifyIconGetRect.

Varje ikon i meddelandefältet kan identifieras på två sätt:

  • DET GUID med vilket ikonen deklareras i registret. Det här är den bästa metoden i Windows 7 och senare.
  • Handtaget för ett fönster som är associerat med meddelandeområdesikonen, plus en programdefinierad ikonidentifierare. Den här metoden används i Windows Vista och tidigare.

Ikoner i meddelandefältet kan ha en knappbeskrivning. Knappbeskrivningen kan vara antingen en standardknappbeskrivning (rekommenderas) eller ett programritade popup-gränssnitt. Även om en knappbeskrivning inte krävs rekommenderar vi det.

Ikonerna för meddelandeområdet bör vara medvetna om hög DPI. Ett program bör ange både en 16x16 pixelikon och en 32x32-ikon i resursfilen och sedan använda LoadIconMetric- för att säkerställa att rätt ikon läses in och skalas korrekt.

Programmet som ansvarar för meddelandeområdesikonen ska hantera ett musklick för ikonen. När en användare högerklickar på ikonen bör den öppna en vanlig snabbmeny. Resultatet av ett enda klick med den vänstra musknappen varierar dock med ikonens funktion. Den bör visa det som användaren förväntar sig att se i det formulär som passar bäst för innehållet – ett popup-fönster, en dialogruta eller själva programfönstret. Den kan till exempel visa statustext för en statusikon eller ett skjutreglage för volymkontrollen.

Placeringen av ett popup-fönster eller en dialogruta som resulterar i klickningen ska placeras nära koordinaten för klickningen i meddelandefältet. Använd CalculatePopupWindowPosition för att fastställa dess plats.

Ikonen kan läggas till i meddelandefältet utan att ett meddelande visas genom att endast definiera de ikonspecifika medlemmarna i NOTIFYICONDATA- (beskrivs ovan) och anropa Shell_NotifyIcon som visas här:

NOTIFYICONDATA nid = {};
// Do NOT set the NIF_INFO flag.
...                    
Shell_NotifyIcon(NIM_ADD, &nid);

Du kan också lägga till ikonen i meddelandefältet och visa ett meddelande i ett anrop till Shell_NotifyIcon. Fortsätt med anvisningarna i det här avsnittet om du vill göra det.

Definiera NOTIFYICONDATA-versionen

I takt med att Windows har utvecklats har NOTIFYICONDATA- struktur utökats till att omfatta fler medlemmar för att definiera fler funktioner. Konstanter används för att deklarera vilken version av NOTIFYICONDATA som ska användas med meddelandefältets ikon för att möjliggöra bakåtkompatibilitet. Om det inte finns en övertygande anledning att göra något annat rekommenderar vi starkt att du använder den NOTIFYICON_VERSION_4 versionen som introducerades i Windows Vista. Den här versionen innehåller alla tillgängliga funktioner, inklusive den bästa möjligheten att identifiera ikonen för meddelandeområdet genom ett registrerat GUID, en överlägsen återanropsmekanism och bättre tillgänglighet.

Ange versionen via följande anrop:

NOTIFYICONDATA nid = {};
... 
nid.uVersion = NOTIFYICON_VERSION_4;
// Add the icon
Shell_NotifyIcon(NIM_ADD, &nid);
// Set the version
Shell_NotifyIcon(NIM_SETVERSION, &nid);

Observera att det här anropet till Shell_NotifyIcon inte visar något meddelande.

Definiera meddelandets utseende och innehåll

Ett meddelande är en särskild typ av knappbeskrivningskontroll för pratbubblan. Den innehåller en rubrik, brödtext och en ikon. Precis som i ett fönster har den knappen Stäng i det övre högra hörnet. Den innehåller också en alternativ-knappen som öppnar objektet Ikoner för meddelandeområde på Kontrollpanelen, vilket gör att användaren kan visa eller dölja ikonen eller bara visa meddelanden utan en ikon.

skärmbild av meddelandeballong som anger att batteridriften är låg

NOTIFYICONDATA struktur som skickas i anropet till Shell_NotifyIcon innehåller information som anger både meddelandeområdesikonen och själva meddelandeballongen. Följande är de objekt som är specifika för meddelandet som kan anges via NOTIFYICONDATA.

  • En ikon som ska visas i meddelandeballongen, som anges av meddelandetypen. Storleken på ikonen kan anges samt anpassade ikoner.
  • En meddelanderubrik. Den här rubriken ska vara högst 48 tecken lång på engelska (för lokalisering). Rubriken är den första raden i meddelandet och delas upp med hjälp av teckenstorlek, färg och vikt.
  • Text som ska användas i brödtexten i meddelandet. Den här texten ska innehålla högst 200 tecken på engelska (för lokalisering).
  • Om meddelandet ska ignoreras om det inte kan visas omedelbart.
  • En timeout för meddelandet. Den här inställningen ignoreras i Windows Vista och senare system till förmån för en systemomfattande tidsgräns för tillgänglighet.
  • Om meddelandet ska respektera tyst tid anger du genom flaggan NIIF_RESPECT_QUIET_TIME.

Not

IUserNotification och IUserNotification2-gränssnitten är COM-omslutningar (Component Object Model) för Shell_NotifyIcon. För närvarande tillhandahåller de dock inte alla NOTIFYICON_VERSION_4 funktioner som är tillgängliga via Shell_NotifyIcon direkt, inklusive användningen av ett GUID för att identifiera meddelandeområdesikonen.

 

Kontrollera användarstatus

Systemet använder funktionen SHQueryUserNotificationState används för att kontrollera om användaren befinner sig i tyst tid, borta från datorn eller i ett okrubblat tillstånd, till exempel presentationsläge. Om systemet visar din avisering beror på det här tillståndet.

Not

Om ditt program använder en anpassad meddelandemetod som inte använder Shell_NotifyIcon, IUserNotificationeller IUserNotification2bör det alltid uttryckligen anropa SHQueryUserNotificationState för att avgöra om det ska visa meddelandegränssnittet vid den tidpunkten.

 

Meddelanden som skickas när användaren är borta placeras i kö för visning, men eftersom du inte vet när användaren kommer tillbaka eller om meddelandet fortfarande är giltigt vid den tidpunkten kan du överväga att skicka meddelandet igen senare.

Meddelanden som skickas under tyst tid ignoreras. Designriktlinjerna begär att alla meddelanden ska vara okunniga. De bör inte kräva omedelbara användaråtgärder. Därför är inget meddelande så viktigt att det åsidosätter tyst tid.

Visa meddelandet

När du har angett NOTIFYICONDATA- version och definierat meddelandet i en NOTIFYICONDATA- struktur anropar du Shell_NotifyIcon för att visa ikonen.

  • Om meddelandeområdesikonen inte finns anropar du Shell_NotifyIcon för att lägga till ikonen. Gör detta för både tillfälliga och icke-tillfälliga ikoner.

    NOTIFYICONDATA nid = {};
    ...                    
    Shell_NotifyIcon(NIM_ADD, &nid);
    
  • Om meddelandeområdesikonen redan finns anropar du Shell_NotifyIcon för att ändra ikonen.

    NOTIFYICONDATA nid = {};
    ...                    
    Shell_NotifyIcon(NIM_MODIFY, &nid);
    

Följande kod visar ett exempel på hur du anger NOTIFYICONDATA data och skickar dem via Shell_NotifyIcon. Observera att det här exemplet identifierar meddelandeikonen via ett GUID (rekommenderas i 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;

Ta bort en ikon

Om du vill ta bort en ikon – till exempel när du bara har lagt till ikonen tillfälligt för att sända ett meddelande – anropar du Shell_NotifyIconsom visas här. Endast en minimal NOTIFYICONDATA struktur som identifierar ikonen behövs i det här anropet.

NOTIFYICONDATA nid = {};
...                    
Shell_NotifyIcon(NIM_DELETE, &nid);

Not

När ett program avinstalleras kan dess meddelandeområdesikon fortfarande visas för användaren som ett alternativ på sidan Ikoner för meddelandeområde på Kontrollpanelen i upp till sju dagar. Ändringar som görs där har dock ingen effekt.

 

SDK-exempel

Se exemplet NotificationIcon Sample i Windows Software Development Kit (SDK) för ett fullständigt exempel på användningen av Shell_NotifyIcon.

Shell_NotifyIcon

Shell_NotifyIconGetRect

NOTIFYICONDATA

SHQueryUserNotificationState

IUserNotification

IUserNotification2

Aktivitetsfältet