De taakbalk
De Windows-interface bevat een speciale bureaubladwerkbalk van de toepassing de taakbalkgenoemd. U kunt de taakbalk gebruiken voor taken zoals schakelen tussen geopende vensters en het starten van nieuwe toepassingen.
Notitie
Zie Taakbalkextensiesvoor meer informatie over wijzigingen in de taakbalk vanaf Windows 7.
Dit onderwerp bevat de volgende secties.
Over de taakbalk
De taakbalk bevat het volgende:
- Startmenu
- Werkbalk Snel starten (alleen Windows Vista en eerder)
- Taakbalkknoppen
- Werkbalken (optioneel)
- Systeemvak
Het menu Start bevat opdrachten die toegang hebben tot programma's, documenten en instellingen. Deze opdrachten omvatten Alle programma's, Documenten, Configuratiescherm, Games, Help en ondersteuning, Afsluiten, en Programma's en bestanden zoeken.
De Start in eerdere versies van Windows bevat items zoals Zoeken en Uitvoeren, waarvan de functionaliteit is opgenomen in Zoekprogramma's en bestanden in Windows Vista en later.
De balk Snel starten, beschikbaar in versies van Windows ouder dan Windows 7, bevat snelkoppelingen naar toepassingen. Windows biedt standaardvermeldingen, zoals Windows Internet Explorer, en de gebruiker kan eventuele andere sneltoetsen toevoegen die ze kiezen. Pictogrammen in dit gebied reageren op één klik. In Windows 7 en hoger is deze functionaliteit opgenomen in de taakbalkknoppen.
De Shell plaatst een knop op de taakbalk wanneer een toepassing een onafhankelijk venster maakt, dat wil zeggen, een venster dat geen ouder heeft en de juiste uitgebreide stijlvlaggen bevat (zie Taakbalkknoppen beheren, hieronder). Als u wilt overschakelen naar een venster, klikt de gebruiker op de knop van het venster. Deze functionaliteit is aanzienlijk uitgebreid vanaf Windows 7. Zie Taakbalkextensiesvoor meer informatie.
Toepassingen kunnen pictogrammen in het systeemvak plaatsen om de status van een bewerking aan te geven of om de gebruiker op de hoogte te stellen van een gebeurtenis. Een toepassing kan bijvoorbeeld een printerpictogram in het meldingsgebied plaatsen om aan te geven dat een afdruktaak wordt uitgevoerd. Echter, in Windows 7 en hoger moet sommige van de eerder door het meldingsgebied verstrekte informatie via de taakbalkknop van de applicatie worden verstrekt. Het systeemvak bevindt zich aan de rechterkant van de taakbalk (als de taakbalk horizontaal is) of onderaan (als de taakbalk verticaal is). Zie voor meer informatie Meldingen en het Systeemvak.
In het systeemvak wordt ook de huidige tijd weergegeven als deze optie is geselecteerd. De optie wordt gevonden als:
- Windows 7 en hoger: de vervolgkeuzelijst Klok in de pagina Systeempictogrammen in- of uitschakelen van de Systeemvakpictogrammen Configuratiescherm toepassing (ook toegankelijk via de eigenschappen van het systeemvak).
- Windows Vista: het selectievakje Klok in de pagina Meldingsgebied van het taakbalk en startmenu eigenschappenvenster.
- Windows XP-: het selectievakje De klok weergeven in het venster taakbalk en startmenu eigenschappenvenster.
De gebruiker kan met de rechtermuisknop op de taakbalk klikken om het snelmenu weer te geven. Het snelmenu bevat opdrachten voor trapsgewijs vensters, stapelvensters, vensters naast elkaar weergeven, het bureaublad weergeven, Taakbeheer starten en eigenschappen van de taakbalk instellen. Het snelmenu biedt ook de mogelijkheid om een set werkbalken toe te voegen aan of te verwijderen uit de taakbalk. U kunt nieuwe werkbalken aan dit menu toevoegen door ze te registreren onder de categorie CATID_DeskBand. Zie Bandobjecten implementerenvoor meer informatie. Houd er rekening mee dat vanaf Windows 7 de taakbalk en het systeemvak afzonderlijke snelmenu's hebben. Deze snelmenu's delen enkele opties, zoals vensteropmaak en voeg andere opties toe.
Weergaveopties voor taakbalk
De taakbalk ondersteunt twee weergaveopties: Automatisch verbergen en, alleen in Windows Vista en eerder, Always On Top (de taakbalk bevindt zich altijd in deze modus in Windows 7 en hoger). Om deze opties in te stellen, moet de gebruiker het snelmenu van de taakbalk openen, op Eigenschappenklikken en de opties Taakbalk automatisch verbergen of Taakbalk boven andere vensters houden selecteren of deselecteren. Gebruik het ABM_GETSTATE bericht om de status van deze weergaveopties op te halen. Als u een melding wilt ontvangen wanneer de status van deze weergaveopties wordt gewijzigd, verwerkt u het ABN_STATECHANGE meldingsbericht in uw vensterprocedure. Als u de status van deze weergaveopties wilt wijzigen, gebruikt u het ABM_SETSTATE bericht.
Het werkgebied is het gedeelte van het scherm dat niet wordt verborgen door de taakbalk. Als u de grootte van het werkgebied wilt ophalen, roept u de functie SystemParametersInfo aan met de SPI_GETWORKAREA waardeset. Als u de rechthoekcoördinaten wilt ophalen die de locatie van de taakbalk beschrijven, gebruikt u het ABM_GETTASKBARPOS bericht.
Het is mogelijk om de taakbalk te bedekken door expliciet de grootte van de vensterrechthoek in te stellen die gelijk is aan de grootte van het scherm met SetWindowPos. Voor Windows 2000-systemen of hoger moet het venster ofwel WS_CAPTION of WS_THICKFRAMEontbreken, of het venster moet zo worden aangepast dat het clientgebied het hele scherm dekt. Ook met name voor deze systemen, als de taakbalk is ingesteld op Always On Top, blijft deze alleen verborgen terwijl de toepassing de voorgrondtoepassing is.
Snelkoppelingen toevoegen aan het startmenu
Als u een item wilt toevoegen aan het Programma's submenu in Microsoft Windows NT 4.0, Windows 2000 en hoger of Windows 95 of hoger, volgt u deze stappen.
- Maak een shell-koppeling met behulp van de IShellLink interface.
- Haal de PIDL van de map Programma's op met behulp van SHGetSpecialFolderLocation, waarbij CSIDL_PROGRAMSwordt doorgegeven.
- Voeg de Shell-koppeling toe aan de map Programma's. U kunt ook een map maken in de map Programma's en de koppeling naar die map toevoegen.
Taakbalkknoppen beheren
De Shell maakt een knop op de taakbalk wanneer een toepassing een venster maakt dat niet eigendom is van een toepassing. Als u ervoor wilt zorgen dat de vensterknop op de taakbalk wordt geplaatst, maakt u een niet-opgegeven venster met de uitgebreide stijl WS_EX_APPWINDOW. Als u wilt voorkomen dat de vensterknop op de taakbalk wordt geplaatst, maakt u het niet-vertrouwde venster met de uitgebreide stijl WS_EX_TOOLWINDOW. Als alternatief kunt u een verborgen venster maken en dit verborgen venster de eigenaar van uw zichtbare venster maken.
De shell verwijdert de knop van een venster alleen van de taakbalk als de stijl van het venster zichtbare taakbalkknoppen ondersteunt. Als u de stijl van een venster dynamisch wilt wijzigen in een venster dat geen zichtbare taakbalkknoppen ondersteunt, moet u het venster eerst verbergen (door ShowWindow- met SW_HIDEaan te roepen), de stijl van het venster te wijzigen en vervolgens het venster weer te geven.
De vensterknop bevat doorgaans het toepassingspictogram en de titel. Als de toepassing echter geen systeemmenu bevat, wordt de vensterknop gemaakt zonder het pictogram.
Als u wilt dat uw toepassing de aandacht van de gebruiker krijgt wanneer het venster niet actief is, gebruikt u de functie FlashWindow- om de gebruiker te laten weten dat er een bericht wacht. Deze functie knippert de vensterknop. Zodra de gebruiker op de vensterknop klikt om het venster te activeren, kan uw toepassing het bericht weergeven.
De inhoud van de taakbalk wijzigen
versie 4.71 en hoger van Shell32.dll voegt de mogelijkheid toe om de inhoud van de taakbalk te wijzigen. Vanuit een toepassing kunt u nu knoppen op de taakbalk toevoegen, verwijderen en activeren. Als u het item activeert, wordt het venster niet geactiveerd; het item wordt weergegeven als ingedrukt op de taakbalk.
De mogelijkheden voor het wijzigen van de taakbalk worden geïmplementeerd in een COM-object (Component Object Model) (CLSID_TaskbarList) waarmee de ITaskbarList interface (IID_ITaskbarList) wordt weergegeven. U moet de methode ITaskbarList::HrInit aanroepen om het object te initialiseren. Vervolgens kunt u de methoden van de ITaskbarList interface gebruiken om de inhoud van de taakbalk te wijzigen.
Pictogrammen toevoegen, wijzigen en verwijderen in het meldingsgebied
Gebruik de functie Shell_NotifyIcon om pictogrammen toe te voegen, te wijzigen of te verwijderen uit het systeemvak. De parameter dwMessage van Shell_NotifyIcon is een bericht op de taakbalk waarin de actie wordt opgegeven die moet worden uitgevoerd. De pnid parameter is een aanwijzer naar een NOTIFYICONDATA structuur die wordt gebruikt om het pictogram te identificeren en eventuele aanvullende informatie door te geven die nodig is voor het systeem om het bericht te verwerken.
U kunt de volgende acties uitvoeren met meldingspictogrammen.
- Als u een pictogram wilt toevoegen aan het systeemvak van de taakbalk, roept u Shell_NotifyIcon aan met de parameter dwMessage ingesteld op NIM_ADD. De NOTIFYICONDATA-structuur wordt gebruikt om de handle en identifier van het pictogram en de tooltekst op te geven. Als de gebruiker het selectievakje Klok weergeven heeft ingeschakeld in de taakbalkeigenschappen, plaatst het systeem het pictogram links van de klok. Anders wordt het pictogram aan de rechterkant of onder aan de taakbalk weergegeven. Bestaande pictogrammen worden naar links verplaatst om ruimte te maken voor het nieuwe pictogram.
- Als u de gegevens van een pictogram wilt wijzigen, inclusief de bijbehorende pictogramgreep, tooltiptekst en callbackbericht ID, roept u Shell_NotifyIcon aan met dwMessage ingesteld op NIM_MODIFY.
- Als u een pictogram uit het systeemvak wilt verwijderen, roept u Shell_NotifyIcon aan met de parameter dwMessage ingesteld op NIM_DELETE.
Wanneer u een bewerking aan de gebruikersinterface hebt voltooid, keert u terug naar het meldingengebied door Shell_NotifyIcon aan te roepen waarbij dwMessage is ingesteld op NIM_SETFOCUS. U kunt dit bijvoorbeeld doen wanneer een taakbalkpictogram een snelmenu weergeeft, maar de gebruiker annuleert het door op de ESCAPE-toets te drukken.
Callbackberichten ontvangen van het meldingsgebied
Toepassingen plaatsen meestal pictogrammen in het systeemvak van de taakbalk om te fungeren als statusindicatoren. U kunt aanvullende informatie opgeven wanneer de gebruiker muisacties uitvoert, zoals het verplaatsen van de muisaanwijzer op het pictogram of klikken op het pictogram.
Het systeem meldt u van muis- en toetsenbordgebeurtenissen door een toepassingsgedefinieerd callback-bericht te verzenden dat is gekoppeld aan een bepaald pictogram. Op deze manier kan het systeem een toepassing waarschuwen wanneer de gebruiker bijvoorbeeld op het pictogram klikt of selecteert door op een toets te drukken.
U definieert het callbackbericht van een pictogram wanneer u het pictogram aan de taakbalk toevoegt. De callback-bericht-id wordt gespecificeerd in de uCallbackMessage member van de NOTIFYICONDATA structuur die is doorgegeven met NIM_ADD. Wanneer er een gebeurtenis optreedt, stuurt het systeem het callbackbericht naar de vensterprocedure van het venster dat is opgegeven door de hWnd lid. De parameter wParam van het bericht bevat de id van het taakbalkpictogram waarin de gebeurtenis heeft plaatsgevonden. De parameter lParam bevat het muis- of toetsenbordbericht dat aan de gebeurtenis is gekoppeld. Wanneer de muiswijzer bijvoorbeeld naar een taakbalkpictogram gaat, bevat lParam-WM_MOUSEMOVE.
De resultaten van verschillende muisgebeurtenissen kunnen als volgt worden samengevat:
- Wanneer de gebruiker de muisaanwijzer over het pictogram beweegt, geeft het systeem de knopinfotekst weer die is opgegeven in NOTIFYICONDATA-.
- Wanneer de gebruiker op het pictogram klikt, ontvangt uw toepassing een melding WM_LBUTTONDOWN.
- Wanneer de gebruiker met de rechtermuisknop op het pictogram klikt, ontvangt uw toepassing een melding WM_RBUTTONDOWN.
- Wanneer de gebruiker dubbelklikt op het pictogram, ontvangt uw toepassing een melding WM_LBUTTONDBLCLK.
Normaal gesproken zorgt het klikken op het pictogram ervoor dat de toepassing een venster met aanvullende informatie weergeeft, door met de rechtermuisknop op een snelmenu te klikken en door te dubbelklikken, wordt de standaardsnelmenuopdracht uitgevoerd.
Voor een voorbeeld van hoe je de knopinfo kunt wijzigen die is gekoppeld aan een notificatiegebiedpictogram, zie Ballontips voor statusbalkpictogrammen.
Versies 5.0 en hoger van de Shell verwerken Shell_NotifyIcon muis- en toetsenbord-gebeurtenissen op verschillende manieren dan eerdere Shell-versies die zijn gevonden in Windows NT 4.0, Windows 95 en Windows 98. De verschillen zijn als volgt:
- Als een gebruiker het snelmenu van een meldingspictogram aanvraagt met het toetsenbord, verzendt de versie 5.0 Shell de bijbehorende toepassing een WM_CONTEXTMENU bericht. Eerdere versies verzenden WM_RBUTTONDOWN en WM_RBUTTONUP berichten.
- Als een gebruiker een meldingspictogram met het toetsenbord selecteert en het activeert met de spatiebalk of Enter-toets, verzendt de versie 5.0 Shell de bijbehorende toepassing een NIN_KEYSELECT melding. Eerdere versies verzenden WM_RBUTTONDOWN en WM_RBUTTONUP berichten.
- Als een gebruiker een meldingspictogram met de muis selecteert en deze activeert met de ENTER-toets, verzendt de versie 5.0 Shell de bijbehorende toepassing een NIN_SELECT melding. Eerdere versies verzenden WM_RBUTTONDOWN en WM_RBUTTONUP berichten.
- Als een gebruiker de muisaanwijzer over een pictogram beweegt waaraan een ballontip is gekoppeld, verzendt de versie 6.0 Shell (Windows XP) de volgende berichten.
-
- NIN_BALLOONSHOW - Verzonden wanneer de ballon wordt weergegeven (ballonnen staan in de wachtrij).
- NIN_BALLOONHIDE - Verzonden wanneer de ballon verdwijnt, bijvoorbeeld wanneer het pictogram wordt verwijderd. Dit bericht wordt niet verzonden als de ballon wordt gesloten vanwege een time-out of een muisklik.
- NIN_BALLOONTIMEOUT - Verzonden wanneer de ballon wordt gesloten vanwege een time-out.
- NIN_BALLOONUSERCLICK - Verzonden wanneer de ballon wordt gesloten vanwege een muisklik.
-
U kunt selecteren op welke manier de Shell zich moet gedragen door Shell_NotifyIcon aan te roepen met dwMessage- ingesteld op NIM_SETVERSION. Stel de uVersion lid van de NOTIFYICONDATA- structuur in om aan te geven of u versie 5.0 of pre-versie 5.0-gedrag wilt.
Melding voor het maken van de taakbalk
Met Microsoft Internet Explorer 4.0 en hoger wordt door de Shell aan toepassingen gemeld dat de taakbalk is gemaakt. Wanneer de taakbalk is gemaakt, wordt er een bericht geregistreerd met de tekenreeks TaskbarCreated en wordt dit bericht vervolgens uitgezonden naar alle vensters op het hoogste niveau. Wanneer uw taakbalktoepassing dit bericht ontvangt, wordt ervan uitgegaan dat alle taakbalkpictogrammen die zijn toegevoegd, zijn verwijderd en opnieuw worden toegevoegd. Deze functie is doorgaans alleen van toepassing op services die al worden uitgevoerd wanneer de Shell wordt gestart. In het volgende voorbeeld ziet u een zeer vereenvoudigde methode voor het verwerken van deze case.
In Windows 10 verzendt de taakbalk dit bericht ook wanneer de DPI van het primaire beeldscherm verandert.
LRESULT CALLBACK WndProc(HWND hWnd,
UINT uMessage,
WPARAM wParam,
LPARAM lParam)
{
static UINT s_uTaskbarRestart;
switch(uMessage)
{
case WM_CREATE:
s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
break;
default:
if(uMessage == s_uTaskbarRestart)
AddTaskbarIcons();
break;
}
return DefWindowProc(hWnd, uMessage, wParam, lParam);
}
De taakbalk gebruiken
Deze sectie bevat voorbeelden die laten zien hoe u pictogrammen toevoegt aan het systeemvak van de taakbalk en hoe u callback-berichten voor taakbalkpictogrammen verwerkt.
Pictogrammen op de taakbalk toevoegen en verwijderen in het meldingsgebied
U voegt een pictogram toe aan het notificatiegebied van de taakbalk door een NOTIFYICONDATA--structuur in te vullen en vervolgens de structuur door te geven aan Shell_NotifyIcon met dwMessage- ingesteld op NIM_ADD. De structuurleden moeten de ingang opgeven aan het venster dat het pictogram toevoegt, evenals de pictogram-id en pictogramgreep. U kunt ook knopinfotekst voor het pictogram opgeven. Als u muisberichten voor het pictogram wilt ontvangen, geeft u de id op van het callback-bericht dat het systeem moet gebruiken om het bericht naar de vensterprocedure te verzenden.
De functie in het volgende voorbeeld laat zien hoe u een pictogram toevoegt aan de taakbalk.
// MyTaskBarAddIcon - adds an icon to the notification area.
// Returns TRUE if successful, or FALSE otherwise.
// hwnd - handle to the window to receive callback messages
// uID - identifier of the icon
// hicon - handle to the icon to add
// lpszTip - tooltip text
BOOL MyTaskBarAddIcon(HWND hwnd, UINT uID, HICON hicon, LPSTR lpszTip)
{
BOOL res;
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = hwnd;
tnid.uID = uID;
tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
tnid.uCallbackMessage = MYWM_NOTIFYICON;
tnid.hIcon = hicon;
if (lpszTip)
hr = StringCbCopyN(tnid.szTip, sizeof(tnid.szTip), lpszTip,
sizeof(tnid.szTip));
// TODO: Add error handling for the HRESULT.
else
tnid.szTip[0] = (TCHAR)'\0';
res = Shell_NotifyIcon(NIM_ADD, &tnid);
if (hicon)
DestroyIcon(hicon);
return res;
}
Als u een pictogram uit het systeemvak van de taakbalk wilt verwijderen, vult u een NOTIFYICONDATA- structuur in en roept u Shell_NotifyIcon aan met dwMessage ingesteld op NIM_DELETE. Wanneer u een taakbalkpictogram verwijdert, geeft u alleen de cbSize-op, hWnden uID leden van de structuur. Bijvoorbeeld:
// MyTaskBarDeleteIcon - deletes an icon from the notification area.
// Returns TRUE if successful, or FALSE otherwise.
// hwnd - handle to the window that added the icon.
// uID - identifier of the icon to delete.
BOOL MyTaskBarDeleteIcon(HWND hwnd, UINT uID)
{
BOOL res;
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = hwnd;
tnid.uID = uID;
res = Shell_NotifyIcon(NIM_DELETE, &tnid);
return res;
}
Muisevenementen ontvangen
Als u een callbackbericht opgeeft voor een taakbalkpictogram, verzendt het systeem het naar uw toepassing wanneer er een muisevenement optreedt in de begrenzingsrechthoek van het pictogram. De parameter wParam van het bericht specificeert de identificatie van het taakbalkpictogram, en de parameter lParam van het bericht specificeert het bericht dat door het systeem is gegenereerd als gevolg van de muisgebeurtenis.
De functie in het volgende voorbeeld is afkomstig van een toepassing die zowel accu- als printerpictogrammen toevoegt aan de taakbalk. De toepassing roept de functie aan wanneer deze een callback-bericht ontvangt. De functie bepaalt of de gebruiker op een van de pictogrammen heeft geklikt en, als er een klik is opgetreden, een door de toepassing gedefinieerde functie aanroept om statusinformatie weer te geven.
// On_MYWM_NOTIFYICON - processes callback messages for taskbar icons.
// wParam - first message parameter of the callback message.
// lParam - second message parameter of the callback message.
void On_MYWM_NOTIFYICON(WPARAM wParam, LPARAM lParam)
{
UINT uID;
UINT uMouseMsg;
uID = (UINT) wParam;
uMouseMsg = (UINT) lParam;
if (uMouseMsg == WM_LBUTTONDOWN)
{
switch (uID)
{
case IDI_MYBATTERYICON:
// The user clicked the battery icon. Display the
// battery status.
ShowBatteryStatus();
break;
case IDI_MYPRINTERICON:
// The user clicked the printer icon. Display the
// status of the print job.
ShowJobStatus();
break;
default:
break;
}
}
return;
}