Учебники

MFC — листы недвижимости

Лист свойств , также известный как диалоговое окно с вкладкой, представляет собой диалоговое окно, содержащее страницы свойств. Каждая страница свойств основана на ресурсе шаблона диалога и содержит элементы управления. Он вложен в страницу с вкладкой сверху. Вкладка называет страницу и указывает ее назначение. Пользователи щелкают вкладку в окне свойств, чтобы выбрать набор элементов управления.

Чтобы создать страницы свойств, давайте рассмотрим простой пример создания диалогового проекта MFC.

Проект МФЦ

Как только проект создан, нам нужно добавить несколько страниц свойств.

Visual Studio позволяет легко создавать ресурсы для страниц свойств, отображая диалоговое окно «Добавить ресурс», раскрывая узел «Диалог» и выбирая один из элементов IDD_PROPPAGE_X.

Шаг 1 — Щелкните правой кнопкой мыши свой проект в обозревателе решений и выберите «Добавить» → «Ресурсы».

IDD Propage Larg

Шаг 2 — Выберите IDD_PROPPAGE_LARGE и нажмите NEW.

IDD Propage Larg New

Шаг 3 — Давайте изменим ID и заголовок этой страницы свойств на IDD_PROPPAGE_1 и Страница свойств соответственно, как показано выше.

Шаг 4 — Щелкните правой кнопкой мыши на странице свойств в окне дизайнера.

Propage в окне дизайнера

Шаг 5 — Выберите опцию Добавить класс.

Propage Add Class Option

Шаг 6 — Введите имя класса и выберите CPropertyPage из выпадающего списка базового класса.

Шаг 7 — Нажмите Готово, чтобы продолжить.

Шаг 8 — Добавьте еще одну страницу свойств с идентификатором IDD_PROPPAGE_2 и Caption Property Page 2, выполнив вышеупомянутые шаги.

Шаг 9 — Теперь вы можете увидеть две страницы свойств. Для реализации его функциональности нам нужен лист свойств.

Лист свойств группирует страницы свойств и сохраняет их как сущность.

Чтобы создать лист свойств, выполните следующие действия:

Шаг 1 — Щелкните правой кнопкой мыши по вашему проекту и выберите «Добавить»> «Параметры меню класса».

Создать лист недвижимости

Шаг 2. Выберите Visual C ++ → MFC на левой панели и класс MFC на панели шаблонов и нажмите кнопку Добавить.

Класс MFC в панели шаблонов

Шаг 3 — Введите имя класса и выберите CPropertySheet из выпадающего списка базового класса.

Шаг 4 — Нажмите «Готово», чтобы продолжить.

Шаг 5 — Чтобы запустить этот лист свойств, нам нужны следующие изменения в нашем основном классе проекта.

Шаг 6 — Добавьте следующие ссылки в файл CMFCPropSheetDemo.cpp.

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

Шаг 7. Измените метод CMFCPropSheetDemoApp :: InitInstance (), как показано в следующем коде.

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

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

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

Шаг 8 — Вот полная реализация файла 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;
}

Шаг 9 — Когда приведенный выше код скомпилирован и выполнен, вы увидите следующее диалоговое окно. Это диалоговое окно содержит две страницы свойств.