Aangepaste dialoogvensters

Een toepassing kan aangepaste dialoogvensters maken met behulp van een venster toepassing gedefinieerde klasse voor de dialoogvensters in plaats van met behulp van de vooraf gedefinieerde dialoogvenster vak klasse. Toepassingen gebruiken deze methode meestal wanneer een dialoogvenster hun belangrijkste venster is, maar het is ook handig voor het maken van modale en niet-modale dialoogvensters voor toepassingen die standaard overlappende vensters hebben.

Het venster toepassing gedefinieerde klasse kan de toepassing definieert u een venster procedure voor het dialoogvenster vak en proces van berichten voordat ze worden verzonden volgens de vak dialoogvenster. Het laat ook de toepassing pictogram van een klasse, een klasse achtergrond borstel en een klasse menu voor het dialoogvenster definiŽren. De toepassing moet de klasse venster registreren voordat u probeert om een dialoogvenster te maken en verstrekt het dialoogvenster vak sjabloon de atoom waarde of naam van de klasse venster.

Veel toepassingen maken een nieuw dialoogvenster box klasse door eerste ophalen van de informatie van de klasse voor de vooraf gedefinieerde dialoogvenster vak klasse, en doorgegeven aan de functie GetClassInfo , die een WNDCLASS structuur wordt gevuld met de informatie. De toepassing wijzigt van afzonderlijke leden van de structuur, zoals de klassenaam, borstel en pictogram, dan de nieuwe klasse met behulp van de functie RegisterClass registreert. Als een toepassing de WNDCLASS structuur op zijn eigen vult, moet het lid van de cbWndExtra instellen op de DLGWINDOWEXTRA, die is het aantal extra bytes die het systeem voor elk dialoogvenster vereist. Als een toepassing ook extra bytes voor elk dialoogvenster gebruikt, moet ze buiten de extra bytes dat nodig is door het systeem.

Het venster procedure voor het aangepaste dialoogvenster heeft dezelfde parameters en eisen als elke andere venster procedure. In tegenstelling tot andere venster procedures, echter moet de venster procedure voor dit dialoogvenster oproepen de DefDlgProc functie in plaats van de functie DefWindowProc geen berichten die het niet verwerkt. DefDlgProc verricht de berichtverwerking standaard hetzelfde als de procedure venster voor het vooraf gedefinieerde dialoogvenster, waarin u het dialoogvenster vak procedure aanroept.

Een toepassing kan ook aangepaste dialoogvensters maken door het venster procedure van de vooraf gedefinieerde dialoogvenster subclassing. De SetWindowLong functie laat een toepassing het adres van de venster-procedure voor het opgegeven venster ingesteld. De toepassing kan ook proberen te subklasse met de SetClassLong functie, maar doen dus treft alle dialoogvensters in het systeem, niet alleen degenen die behoren tot de toepassing.

Toepassingen die aangepaste dialoogvensters soms maken bieden een alternatieve toetsenbord-interface voor de dialoogvensters. Voor niet-modale dialoogvensters, kan dit betekenen de toepassing niet de functie IsDialogMessage aanroept en in plaats daarvan verwerkt alle toetsenbordinvoer in het venster aangepaste procedure. In dergelijke gevallen kan de toepassing het bericht WM_NEXTDLGCTL de code nodig om de input focus verplaatsen van het ene besturingselement naar het andere te minimaliseren. Dit bericht, wanneer doorgegeven aan DefDlgProc, de invoerfocus verplaatst naar een opgegeven besturingselement en updates van het uiterlijk van de besturingselementen, zoals de standaard drukknop markeerkader of een automatische keuzerondje instellen.