mfc

Trang thuộc tính , còn được gọi là hộp thoại tab , là hộp thoại chứa các trang thuộc tính. Mỗi trang thuộc tính dựa trên tài nguyên mẫu hộp thoại và chứa các điều khiển. Nó được đính kèm trên một trang với một tab ở trên cùng. Tab đặt tên cho trang và cho biết mục đích của nó. Người dùng bấm vào một tab trong trang thuộc tính để chọn một bộ điều khiển. Để tạo các trang thuộc tính, chúng ta hãy xem xét một ví dụ đơn giản bằng cách tạo một dự án MFC dựa trên hộp thoại.

MFC - Bảng thuộc tính

Khi dự án được tạo, chúng ta cần thêm một số trang thuộc tính.

Visual Studio giúp dễ dàng tạo tài nguyên cho các trang thuộc tính bằng cách hiển thị hộp thoại Thêm tài nguyên, mở rộng nút Hộp thoại và chọn một trong các mục IDD_PROPPAGE_X.

Bước 1 – Nhấp chuột phải vào dự án của bạn trong trình khám phá giải pháp và chọn Thêm → Tài nguyên.

MFC - Bảng thuộc tính

Bước 2 – Chọn IDD_PROPPAGE_LARGE và nhấp vào MỚI.

MFC - Bảng thuộc tính

Bước 3 – Hãy để chúng tôi thay đổi ID và Chú thích của trang thuộc tính này thành IDD_PROPPAGE_1 và Trang thuộc tính 1 tương ứng như được hiển thị ở trên.

Bước 4 – Nhấp chuột phải vào trang thuộc tính trong cửa sổ thiết kế.

MFC - Bảng thuộc tính

Bước 5 – Chọn tùy chọn Thêm lớp.

MFC - Bảng thuộc tính

Bước 6 – Nhập tên lớp và chọn CPropertyPage từ danh sách thả xuống của lớp cơ sở.

Bước 7 – Nhấp vào Kết thúc để tiếp tục.

Bước 8 – Thêm một trang thuộc tính khác có ID IDD_PROPPAGE_2 và Trang thuộc tính chú thích 2 bằng cách thực hiện theo các bước đã đề cập ở trên.

Bước 9 – Bây giờ bạn có thể thấy hai trang thuộc tính được tạo. Để thực hiện chức năng của nó, chúng ta cần một trang thuộc tính.

Trang thuộc tính nhóm các trang thuộc tính lại với nhau và giữ nó dưới dạng thực thể.

Để tạo một trang thuộc tính, hãy làm theo các bước dưới đây –

Bước 1 – Nhấp chuột phải vào dự án của bạn và chọn Thêm > Tùy chọn menu lớp.

Bước 2 – Chọn Visual C++ → MFC từ khung bên trái và MFC Class trong khung mẫu và nhấp vào Thêm.

MFC - Bảng thuộc tính

Bước 3 – Nhập tên lớp và chọn CPropertySheet từ danh sách thả xuống của lớp cơ sở.

Bước 4 – Nhấp vào kết thúc để tiếp tục.

Bước 5 – Để khởi chạy bảng thuộc tính này, chúng tôi cần những thay đổi sau trong lớp dự án chính của chúng tôi.

Bước 6 – Thêm các tham chiếu sau vào tệp CMFCPropSheetDemo.cpp.

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

Bước 7 – Sửa đổi phương thức CMFCPropSheetDemoApp::InitInstance() như trong đoạn mã sau.

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

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

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

Bước 8 – Đây là phần triển khai hoàn chỉnh của tệp 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;
}

Bước 9 – Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy hộp thoại sau. Hộp thoại này chứa hai trang thuộc tính.

MFC - Bảng thuộc tính

MFC – Bố cục cửa sổ (xem thêm)

Để lại một bình luận