MFC - Feuilles de propriétés

UNE property sheet, également appelée boîte de dialogue à onglets, est une boîte de dialogue contenant des pages de propriétés. Chaque page de propriétés est basée sur une ressource de modèle de boîte de dialogue et contient des contrôles. Il est inclus sur une page avec un onglet en haut. L'onglet nomme la page et indique son objectif. Les utilisateurs cliquent sur un onglet dans la feuille de propriétés pour sélectionner un ensemble de contrôles.

Pour créer des pages de propriétés, examinons un exemple simple en créant un projet MFC basé sur une boîte de dialogue.

Une fois le projet créé, nous devons ajouter des pages de propriétés.

Visual Studio facilite la création de ressources pour les pages de propriétés en affichant la boîte de dialogue Ajouter une ressource, en développant le nœud Dialog et en sélectionnant l'un des éléments IDD_PROPPAGE_X.

Step 1 - Cliquez avec le bouton droit sur votre projet dans l'explorateur de solutions et sélectionnez Ajouter → Ressources.

Step 2 - Sélectionnez IDD_PROPPAGE_LARGE et cliquez sur NOUVEAU.

Step 3 - Changeons l'ID et la légende de cette page de propriétés en IDD_PROPPAGE_1 et Property Page 1 respectivement comme indiqué ci-dessus.

Step 4 - Cliquez avec le bouton droit sur la page de propriétés dans la fenêtre du concepteur.

Step 5 - Sélectionnez l'option Ajouter une classe.

Step 6 - Entrez le nom de la classe et sélectionnez CPropertyPage dans la liste déroulante de la classe de base.

Step 7 - Cliquez sur Terminer pour continuer.

Step 8 - Ajoutez une autre page de propriétés avec l'ID IDD_PROPPAGE_2 et la page de propriétés de légende 2 en suivant les étapes mentionnées ci-dessus.

Step 9- Vous pouvez maintenant voir deux pages de propriétés créées. Pour implémenter sa fonctionnalité, nous avons besoin d'une feuille de propriétés.

La feuille de propriétés regroupe les pages de propriétés et les conserve comme entité.

Pour créer une feuille de propriétés, suivez les étapes ci-dessous -

Step 1 - Cliquez avec le bouton droit sur votre projet et sélectionnez Ajouter> Options du menu Classe.

Step 2 - Sélectionnez Visual C ++ → MFC dans le volet gauche et Classe MFC dans le volet modèle et cliquez sur Ajouter.

Step 3 - Entrez le nom de la classe et sélectionnez CPropertySheet dans la liste déroulante de la classe de base.

Step 4 - Cliquez sur Terminer pour continuer.

Step 5 - Pour lancer cette feuille de propriétés, nous avons besoin des modifications suivantes dans notre classe de projet principale.

Step 6 - Ajoutez les références suivantes dans le fichier CMFCPropSheetDemo.cpp.

#include "MySheet.h"
#include "PropPage1.h"
#include "PropPage2.h"

Step 7 - Modifiez la méthode CMFCPropSheetDemoApp :: InitInstance () comme indiqué dans le code suivant.

CMySheet mySheet(L"Property Sheet Demo");
CPropPage1 page1;
CPropPage2 page2;

mySheet.AddPage(&page1);
mySheet.AddPage(&page2);

m_pMainWnd = &mySheet;
INT_PTR nResponse = mySheet.DoModal();

Step 8 - Voici l'implémentation complète du fichier CMFCPropSheetDemo.cpp.

// MFCPropSheetDemo.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "MFCPropSheetDemo.h"
#include "MFCPropSheetDemoDlg.h"
#include "MySheet.h"
#include "PropPage1.h"
#include "PropPage2.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CMFCPropSheetDemoApp
BEGIN_MESSAGE_MAP(CMFCPropSheetDemoApp, CWinApp)
   ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()


// CMFCPropSheetDemoApp construction

CMFCPropSheetDemoApp::CMFCPropSheetDemoApp() {

   // support Restart Manager
   m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
   // TODO: add construction code here,
   // Place all significant initialization in InitInstance
}


// The one and only CMFCPropSheetDemoApp object

CMFCPropSheetDemoApp theApp;


// CMFCPropSheetDemoApp initialization

BOOL CMFCPropSheetDemoApp::InitInstance() {
   
   // InitCommonControlsEx() is required on Windows XP if an application
   // manifest specifies use of ComCtl32.dll version 6 or later to enable
   // visual styles. Otherwise, any window creation will fail.
   INITCOMMONCONTROLSEX InitCtrls;
   InitCtrls.dwSize = sizeof(InitCtrls);
   // Set this to include all the common control classes you want to use
   // in your application.
   InitCtrls.dwICC = ICC_WIN95_CLASSES;
   InitCommonControlsEx(&InitCtrls);
   
   CWinApp::InitInstance();
   
   
   AfxEnableControlContainer();
   
   // Create the shell manager, in case the dialog contains
   // any shell tree view or shell list view controls.
   CShellManager *pShellManager = new CShellManager;

   // Activate "Windows Native" visual manager for enabling themes in MFC controls
   CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
   // Standard initialization
   // If you are not using these features and wish to reduce the size
   // of your final executable, you should remove from the following
   // the specific initialization routines you do not need
   // Change the registry key under which our settings are stored
   // TODO: You should modify this string to be something appropriate
   // such as the name of your company or organization
   SetRegistryKey(_T("Local AppWizard-Generated Applications"));
   
   CMySheet mySheet(L"Property Sheet Demo");
   CPropPage1 page1;
   CPropPage2 page2;
   
   mySheet.AddPage(&page1);
   mySheet.AddPage(&page2);
   
   m_pMainWnd = &mySheet;
   INT_PTR nResponse = mySheet.DoModal();
   if (nResponse == IDOK) {
      // TODO: Place code here to handle when the dialog is
      // dismissed with OK
   }else if (nResponse == IDCANCEL) {
      // TODO: Place code here to handle when the dialog is
      // dismissed with Cancel
   }else if (nResponse == -1) {    
      TRACE(traceAppMsg, 0, "Warning: dialog creation failed, 
        so application is terminating unexpectedly.\n");
      TRACE(traceAppMsg, 0, "Warning: if you are using MFC controls on the dialog, 
        you cannot #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS.\n");
   }

   // Delete the shell manager created above.
   if (pShellManager != NULL) {
      delete pShellManager;
   }

   // Since the dialog has been closed, return FALSE so that we exit the
   // application, rather than start the application's message pump.
   return FALSE;
}

Step 9- Lorsque le code ci-dessus est compilé et exécuté, vous verrez la boîte de dialogue suivante. Cette boîte de dialogue contient deux pages de propriétés.