Comment : créer le contrôle utilisateur et l'héberger dans une boîte de dialogue
Mise à jour : novembre 2007
La procédure de cette rubrique suppose que vous créez un nouveau projet MFC basé sur des boîtes de dialogue (CDialog Class), mais vous pouvez également ajouter la prise en charge d'un contrôle Windows Form à une boîte de dialogue MFC existante.
Pour créer le contrôle utilisateur .NET
Créez un nouveau projet Bibliothèque de contrôles Windows Visual C# nommé WindowsControlLibrary1.
Dans le menu Fichier, sélectionnez Nouveau, puis Projet. Dans le dossier Visual C# , sélectionnez l'icône Bibliothèque de contrôles Windows.
Acceptez le nom du projet par défaut WindowsControlLibrary1 en cliquant sur OK.
Le nom par défaut du contrôle .NET sera UserControl1.
Ajoutez les contrôles enfants à UserControl1.
Dans Boîte à outils, ouvrez la liste Tous les Windows Forms. Faites glisser un contrôle Button sur l'aire de conception UserControl1.
Ajoutez également un contrôle TextBox.
Transformez les déclarations des contrôles TextBox et Button de public en privé dans le fichier UserControl1.Designer.cs.
Générez le projet.
Dans le menu Générer, cliquez sur Générer la solution.
Vous pouvez noter le chemin d'accès complet avec le nom de fichier de la DLL générée dans le journal de génération puisque vous introduirez cette information dans l'application MFC.
Pour créer l'application MFC hôte
Créez un nouveau projet d'application MFC.
Dans le menu Fichier, sélectionnez Nouveau, puis Projet. Dans le dossier Visual C++, sélectionnez l'icône Application MFC.
Dans la zone Nom, tapez MFC01. Modifiez le paramètre Solution en Ajouter à la solution. Cliquez sur OK. L'Assistant Application MFC apparaît.
Dans l'Assistant Application MFC, sélectionnez Type d'application. Choisissez Basée sur des boîtes de dialogue. Acceptez les paramètres par défaut et cliquez sur Terminer. Cela créera une application MFC avec une boîte de dialogue MFC.
Ajoutez un contrôle d'espace réservé à la boîte de dialogue MFC.
Cliquez sur l'onglet Affichage des ressources. Dans Affichage des ressources, double-cliquez sur IDD_MFC01_DIALOG. La ressource de boîte de dialogue apparaît dans l'Éditeur de ressources.
Dans Boîte à outils, ouvrez la liste Éditeur de boîtes de dialogue. Faites glisser un contrôle Texte statique sur la ressource de boîte de dialogue. Le contrôle Texte statique servira d'espace réservé pour le contrôle Windows Forms .NET. Redimensionnez-le à environ la taille du contrôle Windows Forms.
Transformez l'ID du contrôle Texte statique en IDC_CTRL1 dans la fenêtre Propriétés et affectez à la propriété TabStop la valeur True.
Configurez le projet.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nœud du projet MFC01, puis sélectionnez Propriétés dans le menu contextuel. La boîte de dialogue Pages de propriétés s'affiche.
Dans la boîte de dialogue Pages de propriétés, dans le contrôle d'arborescence Propriétés de configuration, sélectionnez Général puis, dans la section Paramètres par défaut du projet, affectez à Prise en charge du Common Language Runtime la valeur Common Language Runtime Support (/clr). Cliquez sur OK.
Ajoutez une référence au contrôle .NET.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nœud du projet MFC01 et sélectionnez Références. Dans Pages de propriétés, cliquez sur Ajouter une nouvelle référence, sélectionnez WindowsControlLibrary1 (sous l'onglet Projets) et cliquez sur OK. Cela ajoute une référence sous la forme d'une option du compilateur /FU afin que le programme exécute la compilation ; cela copie également WindowsControlLibrary1.dll dans le répertoire du projet MFC01 afin que le programme s'exécute.
Dans stdafx.h, recherchez la ligne suivante :
#endif // _AFX_NO_AFXCMN_SUPPORT
Ajoutez ces lignes au-dessus :
#include <afxwinforms.h> // MFC Windows Forms support
Ajoutez le code servant à créer le contrôle managé.
Commencez par déclarer le contrôle managé. Dans MFC01Dlg.h, allez à la déclaration de la classe de dialogue et ajoutez une donnée membre pour le contrôle utilisateur dans portée protégée, comme suit :
class CMFC01Dlg : public CDialog { // ... // Data member for the .NET User Control: CWinFormsControl<WindowsControlLibrary1::UserControl1> m_ctrl1;
Fournissez ensuite une implémentation pour le contrôle managé. Dans MFC01Dlg.cpp, dans la substitution de dialogue de CMFC01Dlg::DoDataExchange générée par l'Assistant d'application MFC (et non CAboutDlg::DoDataExchange, qui se trouve dans le même fichier), ajoutez le code suivant pour créer le contrôle managé et l'associer à l'espace réservé statique IDC_CTRL1 :
void CMFC01Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_ManagedControl(pDX, IDC_CTRL1, m_ctrl1); }
Générez et exécutez le projet.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur MFC01, puis sélectionnez Définir comme projet de démarrage.
Dans le menu Générer, cliquez sur Générer la solution.
Dans le menu Déboguer, cliquez sur Exécuter sans débogage. Vous pouvez maintenant voir la boîte de dialogue MFC qui affiche le contrôle Windows Form.
Voir aussi
Autres ressources
Hébergement d'un contrôle utilisateur Windows Form dans une boîte de dialogue MFC