Delen via


Een dialoogvenster implementeren

Er zijn twee manieren om een dialoogvenster toe te voegen aan uw ATL-project: gebruik de wizard ATL-dialoogvenster of voeg het handmatig toe.

Een dialoogvenster toevoegen met de ATL-dialogenwizard

Kies het ATL-vensterobject in het dialoogvenster Klasse toevoegen om een dialoogvenster toe te voegen aan uw ATL-project. Vul de ATL-dialoogvensterwizard in waar van toepassing en klik op Voltooien. De wizard voegt een klasse die is afgeleid van CAxDialogImpl toe aan uw project. Open de resourceweergave in het menu Beeld, zoek het dialoogvenster en dubbelklik erop om het in de resource-editor te openen.

Opmerking

Als het dialoogvenster is afgeleid van CAxDialogImpl, kan het zowel ActiveX- als Windows-besturingselementen hosten. Als u geen ondersteuning voor ActiveX-besturingselementen in uw dialoogvensterklasse wilt, gebruikt u in plaats daarvan CSimpleDialog of CDialogImpl .

Vanuit de klassenweergave kunnen berichten en eventhandlers aan uw dialoogklasse worden toegevoegd. Zie Een ATL-berichthandler toevoegen voor meer informatie.

Een dialoogvenster handmatig toevoegen

Het implementeren van een dialoogvenster is vergelijkbaar met het implementeren van een venster. U leidt een klasse af van CAxDialogImpl, CDialogImpl of CSimpleDialog en declareert u een berichttoewijzing om berichten te verwerken. U moet echter ook een resource-id voor een dialoogvenstersjabloon opgeven in uw afgeleide klasse. Uw klasse moet een gegevenslid IDD hebben dat deze waarde moet bevatten.

Opmerking

Wanneer u een dialoogvenster maakt met de ATL Dialoog Wizard, voegt de wizard automatisch het IDD-lid toe als een enum-type.

CDialogImpl hiermee kunt u een modaal of een modusloos dialoogvenster implementeren dat als host fungeert voor Windows-besturingselementen. CAxDialogImpl hiermee kunt u een modaal of een modusloos dialoogvenster implementeren dat als host fungeert voor zowel ActiveX- als Windows-besturingselementen.

Als u een modaal dialoogvenster wilt maken, maakt u een instantie van uw klasse die is afgeleid van CDialogImpl (of van CAxDialogImpl) en roept u vervolgens de methode DoModal aan. Als u een modaal dialoogvenster wilt sluiten, roept u de EndDialog-methode aan vanuit een berichtenhandler. Als u een modusloos dialoogvenster wilt maken, roept u de methode Create aan in plaats van DoModal. Als u een modusloos dialoogvenster wilt vernietigen, roept u DestroyWindow aan.

Sinkinggebeurtenissen worden automatisch uitgevoerd in CAxDialogImpl. Implementeer de berichthandlers van het dialoogvenster zoals u de handlers in een CWindowImpl-afgeleide klasse zou doen. Als er een berichtspecifieke retourwaarde is, geef deze terug als een LRESULT. De geretourneerde LRESULT waarden worden door ATL toegewezen voor correcte afhandeling door de Windows-dialogbeheerder. Zie de broncode voor CDialogImplBaseT::DialogProc in atlwin.h voor details.

Voorbeeld

Met de volgende klasse wordt een dialoogvenster geïmplementeerd:

class CMyDialog : public CDialogImpl<CMyDialog>
{
public:
   enum { IDD = IDD_MYDLG };

   BEGIN_MSG_MAP(CMyDialog)
      MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
      COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnBnClickedCancel)
   END_MSG_MAP()

   LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      // Do some initialization code
      return 1;
   }
public:
   LRESULT OnBnClickedCancel(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
};

Zie ook

vensterklassen