Meldingen en het systeemvak
Het systeemvak is een deel van de taakbalk die een tijdelijke bron voor meldingen en status biedt. Het kan ook worden gebruikt om pictogrammen weer te geven voor systeem- en programmafuncties die geen aanwezigheid hebben op het bureaublad, zoals batterijniveau, volumeregeling en netwerkstatus. Het systeemvak is historisch bekend als het systeemvak of het statusgebied.
Dit onderwerp bevat de volgende secties:
- richtlijnen voor meldings- en systeemvak
- Een melding maken en weergeven
- SDK-voorbeeld
- Verwante onderwerpen
Richtlijnen voor meldingen en meldingengebied
Zie de secties Meldingen en Systeemvak van de Richtlijnen voor interactie met Windows-gebruikerservaring voor aanbevolen procedures voor het gebruik van meldingen en het systeemvak. Het doel is om gebruikers voordeel te bieden door middel van het juiste gebruik van meldingen, zonder vervelend of afleidend te zijn.
Het systeemvak is niet bedoeld voor kritieke informatie die onmiddellijk moet worden uitgevoerd. Het is ook niet bedoeld voor snelle programma- of opdrachttoegang. Vanaf Windows 7 kunt u veel van deze functionaliteit het beste bereiken via de taakbalkknop van een toepassing.
Met Windows 7 kan een gebruiker alle meldingen van een toepassing onderdrukken als ze ervoor kiezen, zodat een doordacht meldingsontwerp en gebruik de gebruiker zal toestaan dat uw toepassing deze blijft weergeven. Meldingen zijn een onderbreking; zorg ervoor dat ze het waard zijn.
Windows 7 introduceert het concept 'stiltetijd'. Stiltetijd wordt gedefinieerd als het eerste uur nadat een nieuwe gebruiker zich voor het eerst aanmeldt bij zijn of haar account of voor de eerste keer na een upgrade van een besturingssysteem of een schone installatie. Deze keer wordt gereserveerd om de gebruiker in staat te stellen om de nieuwe omgeving te verkennen en vertrouwd te maken zonder te worden afgeleid door meldingen. Gedurende deze periode mogen de meeste meldingen niet worden verzonden of weergegeven. Uitzonderingen zijn feedback die de gebruiker verwacht te zien als reactie op een gebruikersactie, bijvoorbeeld wanneer hij of zij een USB-apparaat aansluit of een document afdrukt. API-details over stille tijd worden verderop in dit onderwerp besproken.
Een melding maken en weergeven
In de resterende secties in dit onderwerp wordt de basisprocedure beschreven die moet worden gevolgd om een melding van uw toepassing aan de gebruiker weer te geven.
- een meldingspictogram toevoegen
- De NOTIFYICONDATA-versie definiëren
- Het uiterlijk en de inhoud van de melding definiëren
- de gebruikersstatus controleren
- De meldings- weergeven
- Een pictogram verwijderen
Een meldingspictogram toevoegen
Als u een melding wilt weergeven, moet u een pictogram in het systeemvak hebben. In bepaalde gevallen, zoals Microsoft Communicator of batterijniveau, is dat pictogram al aanwezig. In veel andere gevallen voegt u echter alleen een pictogram toe aan het systeemvak zolang dat nodig is om de melding weer te geven. In beide gevallen wordt dit bereikt met behulp van de functie Shell_NotifyIcon. Shell_NotifyIcon kunt u een pictogram toevoegen, wijzigen of verwijderen in het systeemvak.
Wanneer een pictogram wordt toegevoegd aan het systeemvak in Windows 7, wordt het standaard toegevoegd aan de sectie overloop van het systeemvak. Dit gebied bevat pictogrammen voor het systeemvak die actief zijn, maar niet zichtbaar zijn in het systeemvak. Alleen de gebruiker kan een pictogram van de overloop naar het systeemvak promoveren, hoewel het systeem in bepaalde omstandigheden tijdelijk een pictogram in het systeemvak kan promoveren als een korte preview (minder dan één minuut).
Notitie
De gebruiker moet de definitieve uitspraak hebben over de pictogrammen die ze in hun systeemvak willen zien. Voordat u een niet-tijdelijk pictogram in het systeemvak installeert, moet de gebruiker om toestemming worden gevraagd. Ze moeten ook de optie (normaal gesproken via het snelmenu) krijgen om het pictogram uit het systeemvak te verwijderen.
De NOTIFYICONDATA structuur die in de aanroep naar Shell_NotifyIcon wordt verzonden, bevat informatie die zowel het systeemvakpictogram als de melding zelf aangeeft. Hier volgen de items die specifiek zijn voor het systeemvakpictogram zelf die kunnen worden ingesteld via NOTIFYICONDATA-.
- De resource waaruit het pictogram wordt genomen.
- Een unieke id voor het pictogram.
- De stijl van de knopinfo van het pictogram.
- De status van het pictogram (verborgen, gedeeld of beide) in het systeemvak.
- De ingang van een toepassingsvenster dat is gekoppeld aan het pictogram.
- Een callback-bericht-id waarmee het pictogram gebeurtenissen kan doorgeven die plaatsvinden in de begrenzingsrechthoek en ballonmelding van het pictogram met het bijbehorende toepassingsvenster. De begrenzingsrechthoek van het pictogram kan worden opgehaald via Shell_NotifyIconGetRect.
Elk pictogram in het systeemvak kan op twee manieren worden geïdentificeerd:
- De GUID waarmee het pictogram wordt gedeclareerd in het register. Dit is de voorkeursmethode in Windows 7 en hoger.
- De greep van een venster dat is gekoppeld aan het systeemvakpictogram, plus een door de toepassing gedefinieerde pictogram-id. Deze methode wordt gebruikt in Windows Vista en eerder.
Pictogrammen in het systeemvak kunnen knopinfo bevatten. De knopinfo kan een standaardknopinfo (voorkeur) of een door de toepassing getekende pop-upinterface zijn. Hoewel er geen knopinfo is vereist, wordt dit aanbevolen.
Pictogrammen in het systeemvak moeten hoog-DPI-bewust zijn. Een toepassing moet zowel een pictogram van 16x16 pixels als een 32x32-pictogram in het resourcebestand opgeven en vervolgens LoadIconMetric- gebruiken om ervoor te zorgen dat het juiste pictogram correct wordt geladen en geschaald.
De toepassing die verantwoordelijk is voor het systeemvakpictogram, moet een muisklik voor dat pictogram afhandelen. Wanneer een gebruiker met de rechtermuisknop op het pictogram klikt, wordt een normaal snelmenu weergegeven. Het resultaat van één klik met de linkermuisknop varieert echter met de functie van het pictogram. Het moet weergeven wat de gebruiker zou verwachten in het formulier dat het meest geschikt is voor die inhoud: een pop-upvenster, een dialoogvenster of het programmavenster zelf. Er kan bijvoorbeeld statustekst worden weergegeven voor een statuspictogram of een schuifregelaar voor het volumebeheer.
De plaatsing van een pop-upvenster of dialoogvenster dat het resultaat is van de klik, moet worden geplaatst in de buurt van de coördinaat van de klik in het systeemvak. Gebruik de CalculatePopupWindowPosition om de locatie te bepalen.
Het pictogram kan worden toegevoegd aan het systeemvak zonder een melding weer te geven door alleen de pictogramspecifieke leden van NOTIFYICONDATA- (hierboven besproken) te definiëren en Shell_NotifyIcon aan te roepen, zoals hier wordt weergegeven:
NOTIFYICONDATA nid = {};
// Do NOT set the NIF_INFO flag.
...
Shell_NotifyIcon(NIM_ADD, &nid);
U kunt het pictogram ook toevoegen aan het systeemvak en een melding allemaal in één aanroep naar Shell_NotifyIconweergeven. Ga hiervoor verder met de instructies in dit onderwerp.
De NOTIFYICONDATA-versie definiëren
Naarmate Windows vordert, is de NOTIFYICONDATA structuur uitgebreid met meer leden om meer functionaliteit te definiëren. Constanten worden gebruikt om te declareren welke versie van NOTIFYICONDATA te gebruiken met het systeemvakpictogram, om compatibiliteit met eerdere versies mogelijk te maken. Tenzij er een overtuigende reden is om iets anders te doen, wordt het sterk aanbevolen dat u de NOTIFYICON_VERSION_4 versie gebruikt, geïntroduceerd in Windows Vista. Deze versie biedt de volledige beschikbare functionaliteit, waaronder de voorkeursmogelijkheid om het systeemvakpictogram te identificeren via een geregistreerde GUID, een superieure callback-mechanisme en betere toegankelijkheid.
Stel de versie in via de volgende aanroepen:
NOTIFYICONDATA nid = {};
...
nid.uVersion = NOTIFYICON_VERSION_4;
// Add the icon
Shell_NotifyIcon(NIM_ADD, &nid);
// Set the version
Shell_NotifyIcon(NIM_SETVERSION, &nid);
Houd er rekening mee dat deze aanroep van Shell_NotifyIcon geen melding weergeeft.
Het uiterlijk en de inhoud van de melding definiëren
Een melding is een speciaal type besturingselement voor knopinfo voor ballonnen. Het bevat een titel, hoofdtekst en een pictogram. Net als een venster heeft het een knop Sluiten in de rechterbovenhoek. Het bevat ook een Opties knop waarmee het item Systeemvakpictogrammen in het Configuratiescherm wordt geopend, zodat de gebruiker het pictogram kan weergeven of verbergen of alleen meldingen zonder pictogram kan weergeven.
De NOTIFYICONDATA structuur die in de aanroep naar Shell_NotifyIcon wordt verzonden, bevat informatie die zowel het systeemvakpictogram als de meldingsballon zelf aangeeft. Hier volgen deze items die specifiek zijn voor de melding die kan worden ingesteld via NOTIFYICONDATA-.
- Een pictogram dat moet worden weergegeven in de meldingsballon, die wordt opgegeven door het meldingstype. De grootte van het pictogram kan worden opgegeven, evenals aangepaste pictogrammen.
- Een meldingstitel. Deze titel moet maximaal 48 tekens lang zijn in het Engels (voor lokalisatie). De titel is de eerste regel van de melding en wordt gescheiden door het gebruik van tekengrootte, kleur en gewicht.
- Tekst voor gebruik in de hoofdtekst van de melding. Deze tekst moet maximaal 200 tekens in het Engels zijn (voor lokalisatie).
- Of de melding moet worden verwijderd als deze niet onmiddellijk kan worden weergegeven.
- Een time-out voor de melding. Deze instelling wordt genegeerd in Windows Vista en latere systemen ten gunste van een time-outinstelling voor toegankelijkheid in het hele systeem.
- Of de melding stiltetijd moet respecteren, stelt u de vlag NIIF_RESPECT_QUIET_TIME in.
Notitie
De IUserNotification en IUserNotification2 interfaces zijn COM-wrappers (Component Object Model) voor Shell_NotifyIcon. Op dit moment bieden ze echter niet de volledige NOTIFYICON_VERSION_4 functionaliteit die rechtstreeks via Shell_NotifyIcon beschikbaar is, inclusief het gebruik van een GUID om het systeemvakpictogram te identificeren.
De gebruikersstatus controleren
Het systeem gebruikt de functie SHQueryUserNotificationState wordt gebruikt om te controleren of de gebruiker zich in een rustige tijd bevindt, niet van de computer of in een niet-onderbreekbare status zoals de presentatiemodus. Of het systeem uw melding weergeeft, is afhankelijk van deze status.
Notitie
Als uw toepassing gebruikmaakt van een aangepaste meldingsmethode die geen gebruik maakt van Shell_NotifyIcon, IUserNotificationof IUserNotification2, moet deze altijd expliciet SHQueryUserNotificationState aanroepen om te bepalen of de gebruikersinterface van meldingen op dat moment moet worden weergegeven.
Meldingen die worden verzonden wanneer de gebruiker afwezig is, worden in de wachtrij geplaatst voor weergave, maar omdat u niet weet wanneer de gebruiker terugkeert of of de melding nog steeds geldig is op dat moment, kunt u overwegen de melding later opnieuw te verzenden.
Meldingen die tijdens stille tijd worden verzonden, worden niet weergegeven. Ontwerprichtlijnen vragen om alle meldingen te negeren. Ze moeten geen onmiddellijke actie van de gebruiker vereisen. Daarom is er geen melding zo belangrijk dat de stiltetijd moet worden overschreven.
De melding weergeven
Zodra u de NOTIFYICONDATA versie hebt ingesteld en de melding hebt gedefinieerd in een NOTIFYICONDATA structuur, roept u Shell_NotifyIcon aan om het pictogram weer te geven.
Als het systeemvakpictogram niet aanwezig is, roept u Shell_NotifyIcon aan om het pictogram toe te voegen. Doe dit voor zowel tijdelijke als niet-tijdelijke pictogrammen.
NOTIFYICONDATA nid = {}; ... Shell_NotifyIcon(NIM_ADD, &nid);
Als het systeemvakpictogram al aanwezig is, roept u Shell_NotifyIcon aan om het pictogram te wijzigen.
NOTIFYICONDATA nid = {}; ... Shell_NotifyIcon(NIM_MODIFY, &nid);
De volgende code toont een voorbeeld van het instellen van NOTIFYICONDATA gegevens en het verzenden ervan via Shell_NotifyIcon. In dit voorbeeld wordt het meldingspictogram geïdentificeerd via een GUID (voorkeur in 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;
Een pictogram verwijderen
Als u bijvoorbeeld een pictogram wilt verwijderen, bijvoorbeeld wanneer u het pictogram alleen tijdelijk hebt toegevoegd om een melding uit te zenden, roept u Shell_NotifyIconaan, zoals hier wordt weergegeven. Alleen een minimale NOTIFYICONDATA structuur die het pictogram identificeert, is nodig in deze aanroep.
NOTIFYICONDATA nid = {};
...
Shell_NotifyIcon(NIM_DELETE, &nid);
Notitie
Wanneer een toepassing wordt verwijderd, kan het systeemvakpictogram nog steeds worden weergegeven aan de gebruiker als optie op de pagina Systeemvakpictogrammen in het Configuratiescherm tot zeven dagen. Wijzigingen die zijn aangebracht, hebben echter geen effect.
SDK-voorbeeld
Zie het NotificationIcon Sample voorbeeld in de Windows Software Development Kit (SDK) voor een volledig voorbeeld van het gebruik van Shell_NotifyIcon.
Verwante onderwerpen