Delen via


Over maandkalendercontrole

Een maandkalenderbesturingselement implementeert een agenda-achtige gebruikersinterface. Dit biedt de gebruiker een zeer intuïtieve en herkenbare methode voor het invoeren of selecteren van een datum. Het besturingselement biedt de toepassing ook de middelen om de datumgegevens in het besturingselement op te halen en in te stellen met behulp van bestaande gegevenstypen.

Functies voor maandkalenderbeheer

In de volgende schermafbeelding ziet u een maandkalender besturingselement dat is aangepast om twee maanden weer te geven.

schermafbeelding van een dialoogvenster met een maandkalender-bedieningselement met twee naast elkaar weergegeven maanden

Notitie

Het uiterlijk en gedrag van het besturingselement maandkalender verschilt enigszins onder verschillende versies van de runtime-bibliotheek. Dit onderwerp richt zich op de controle zoals het wordt weergegeven in Windows Vista met versie 6 van Comctl32.dll.

 

Het besturingselement in de afbeelding heeft de volgende optionele functies.

  • De huidige datum wordt onderaan op een aparte regel weergegeven in het besturingselement. Dit is de standaardstijl.
  • De 'vandaagcirkel' (eigenlijk een rechthoek in deze versie) wordt rond de huidige dag weergegeven en naast de regel Vandaag als visuele aanwijzing. Dit is de standaardstijl.
  • Weeknummers worden links van elke rij met dagen weergegeven. Deze stijl moet worden opgegeven.
  • Sommige datums worden vetgedrukt weergegeven volgens de dagstatus die door de toepassing is ingesteld. Datums met geplande vergaderingen kunnen bijvoorbeeld vet worden weergegeven. Deze stijl moet worden opgegeven.

Notitie

Windows biedt geen ondersteuning voor datums vóór 1601. Zie FILETIME- voor meer informatie.

Het besturingselement maandkalender is gebaseerd op de Gregoriaanse kalender, die in 1753 is geïntroduceerd. Hiermee worden geen datums berekend die consistent zijn met de Juliaanse kalender die vóór 1753 in gebruik was.

 

Een dag selecteren

Standaard, wanneer een gebruiker op de pijlknoppen in de linker- of rechterbovenhoek van het maandkalenderbesturingselement klikt, wordt het besturingselement bijgewerkt om de vorige of volgende maand weer te geven. De gebruiker kan ook dezelfde actie uitvoeren door te klikken op de gedeeltelijke maanden die vóór de eerste maand en na de laatste maand worden weergegeven.

De volgende toetsenbordopdrachten kunnen ook worden gebruikt om de selectie te verplaatsen. De agenda schuift altijd naar behoefte om de geselecteerde dag weer te geven. (De virtuele-sleutelcodes worden weergegeven in de tabel.)

Bevelen Beschrijving
Linkerpijl (VK_LEFT) Selecteer de vorige dag.
Pijlrechts (VK_RIGHT) Selecteer de volgende dag.
Pijl omhoog (VK_UP) Selecteer dezelfde dag in de vorige week.
Pijl-omlaag (VK_DOWN) Selecteer dezelfde dag in de volgende week.
PAGE UP (VK_PRIOR) Selecteer dezelfde dag in de vorige maand. (Als die maand niet de dag heeft, wordt de dichtstbijzijnde dag geselecteerd; de selectie wordt bijvoorbeeld verplaatst van 31 maart naar 28 februari of 29.)
PAGINA OMLAAG (VK_NEXT) Selecteer dezelfde dag in de volgende maand.
HOME (VK_HOME) Selecteer de eerste dag van de huidige maand.
END (VK_END) Selecteer de laatste dag van de huidige maand.
Ctrl+HOME Schuif één maand achteruit en selecteer een dag in de meest linkse kolom.
Ctrl+END Schuif één maand vooruit en selecteer een dag in de meest rechtse kolom.
Ctrl+PAGE UP Selecteer dezelfde dag in een eerdere maand. Het aantal maanden waarmee de selectie wordt verplaatst, is het aantal maanden dat in het besturingselement wordt weergegeven. Als er bijvoorbeeld twee maanden worden weergegeven, wordt de selectie verplaatst van 6 juni naar 6 mei.
CTRL + PAGE DOWN Selecteer dezelfde dag in een eerdere maand. Het aantal maanden waarmee de selectie wordt verplaatst, is het aantal maanden dat in het besturingselement wordt weergegeven. Als er bijvoorbeeld twee maanden worden weergegeven, wordt de selectie verplaatst van 6 juni tot 6 augustus.

 

Als een maandkalender niet de stijl MCS_NOTODAY gebruikt, kan de gebruiker terugkeren naar de huidige dag door onder aan het besturingselement op de tekst 'Vandaag' te klikken. Als de huidige dag niet zichtbaar is, wordt de weergave van het besturingselement bijgewerkt om deze weer te geven.

Een toepassing kan het aantal maanden wijzigen waarmee het besturingselement de weergave bijwerkt met behulp van het MCM_SETMONTHDELTA bericht of de bijbehorende macro, MonthCal_SetMonthDelta. De toetsen PAGE UP en PAGE DOWN wijzigen de geselecteerde maand echter met één, ongeacht het aantal weergegeven maanden of de waarde die door MCM_SETMONTHDELTAis ingesteld.

Een niet-aangrenzende maand selecteren

Wanneer een gebruiker op de naam van een weergegeven maand klikt, worden alle maanden in het jaar weergegeven (in eerdere versies is dit een snelmenu). De gebruiker kan een maand in de lijst selecteren. Als de selectie van de gebruiker niet zichtbaar is, schuift het maandkalender-besturingselement naar de weergave om de gekozen maand weer te geven. In de volgende schermafbeelding toont een maandkalender de maanden van twee aangrenzende jaren.

schermafbeelding van een dialoogvenster met een maandkalendercontrole die alle maanden van 2007 en 2008 weergeeft

Een ander jaar selecteren

Als de gebruiker op het jaar klikt, wordt een groep jaren weergegeven en kan de gebruiker een andere selecteren, zoals wordt weergegeven in de volgende schermafbeelding.

schermopname van een maandkalender met alle jaren van 1999 tot 2020

Lokalisatie

Het maandkalender-besturingselement krijgt zijn formaat en alle tekenreeksen uit LOCALE_USER_DEFAULT.

Tijden in het maandkalenderbeheer

Het besturingselement maandkalender geeft de tijd niet weer. De SYSTEMTIME- structuur die wordt gebruikt voor het instellen en ophalen van de geselecteerde datum of de datum van vandaag bevat echter tijdvelden. Wanneer een datum programmatisch wordt ingesteld, kopieert het besturingselement de tijdvelden zoals ze zijn of valideert het ze eerst en slaat, als ze ongeldig zijn, de huidige standaardtijden op. Hieronder volgt een lijst met berichten die een datum en een beschrijving instellen van hoe de tijdvelden worden behandeld.

Bericht Beschrijving
MCM_SETCURSEL Het besturingselement kopieert de tijdvelden zoals ze zijn, zonder validatie of wijziging.
MCM_SETRANGE De tijdvelden van de doorgegeven structuren worden gevalideerd. Als deze geldig zijn, worden de tijdvelden zonder wijziging gekopieerd. Als ze ongeldig zijn, kopieert het besturingselement de tijdvelden uit de huidige gegevens.
MCM_SETSELRANGE De tijdvelden van de doorgegeven structuren worden gevalideerd. Als deze geldig zijn, worden de tijdvelden zonder wijziging gekopieerd. Als deze ongeldig zijn, behoudt het besturingselement de tijdvelden uit de huidige selectiebereiken.
MCM_SETTODAY Het besturingselement kopieert de tijdvelden zoals ze zijn, zonder validatie of wijziging.

 

Wanneer een datum wordt opgehaald uit het besturingselement, worden de tijdvelden gekopieerd uit de opgeslagen tijden zonder wijziging. De verwerking van de tijdvelden door het besturingselement is een handige manier voor de programmeur. Het besturingselement onderzoekt of wijzigt de tijdvelden niet als gevolg van een andere bewerking dan de hierboven genoemde bewerkingen.