MFC - Danh sách hình ảnh

Hộp kiểm là một điều khiển Windows cho phép người dùng đặt hoặc thay đổi giá trị của một mục thành đúng hoặc sai.

Đây là danh sách các phương thức trong lớp Checkbox .Dưới đây là danh sách ánh xạ thư để kiểm soát hộp kiểm.

Hãy để chúng tôi tạo một dự án dựa trên hộp thoại MFC mới.

Khi dự án được tạo, bạn sẽ thấy hộp thoại sau trong cửa sổ trình thiết kế.

Bước 1 – Xóa dòng TODO và kéo một hộp kiểm và một điều khiển Chỉnh sửa như được hiển thị trong ảnh chụp nhanh sau đây. Đồng thời thay đổi chú thích của hộp kiểm thành Bật Kiểm soát.

MFC - Danh sách hình ảnh

Bước 2 – Nhấp chuột phải vào hộp kiểm và chọn Thêm biến.

MFC - Danh sách hình ảnh

Bước 3 – Bạn có thể chọn các tùy chọn khác nhau trên hộp thoại này. Đối với hộp kiểm, loại biến CButton được chọn theo mặc định.

Bước 4 – Tương tự, ID điều khiển cũng được chọn theo mặc định. Bây giờ chúng ta cần chọn Control trong hộp tổ hợp Category và nhập m_enableDisableCheck vào hộp chỉnh sửa Tên biến và nhấp vào Kết thúc.

Bước 5 – Thêm Biến điều khiển của điều khiển Chỉnh sửa với các cài đặt như trong ảnh chụp nhanh sau đây.

MFC - Danh sách hình ảnh

Bước 6 – Quan sát tệp tiêu đề của lớp hộp thoại. Bạn có thể thấy rằng hai biến này đã được thêm vào ngay bây giờ.

CButton m_enableDisableCheck;
CEdit m_myEditControl;

Bước 7 – Nhấp chuột phải vào hộp kiểm và chọn Thêm biến.

MFC - Danh sách hình ảnh

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

Bước 9 – Thêm giá trị Biến cho điều khiển Chỉnh sửa với các cài đặt như trong ảnh chụp nhanh sau đây.

MFC - Danh sách hình ảnh

Bước 10 – Quan sát tệp tiêu đề. Bạn có thể thấy rằng các biến mới đã được thêm vào ngay bây giờ.

bool m_enableDisableVal;
CString m_editControlVal;

Bước 11 – Bây giờ chúng tôi sẽ thêm trình xử lý sự kiện cho hộp kiểm.

Bước 12 – Nhấp chuột phải vào điều khiển mà bạn muốn xử lý sự kiện thông báo.

MFC - Danh sách hình ảnh

Bước 13 – Chọn sự kiện trong hộp Loại thông báo để thêm vào lớp đã chọn trong hộp Danh sách lớp.

Bước 14 – Chấp nhận tên mặc định trong hộp Tên trình xử lý chức năng hoặc cung cấp tên bạn chọn.

Bước 15 – Nhấp vào Thêm và Chỉnh sửa để thêm trình xử lý sự kiện.

Bước 16 – Bây giờ bạn có thể thấy sự kiện sau được thêm vào cuối tệp CMFCControlManagementDlg.cpp.

void CMFCControlManagementDlg::OnBnClickedCheck1() {
   // TODO: Add your control notification handler code here
}

Bước 17 – Điều này bật/tắt điều khiển chỉnh sửa khi hộp kiểm được chọn/bỏ chọn.

Bước 18 – Bây giờ chúng tôi đã thêm trình xử lý sự kiện nhấp vào hộp kiểm. Đây là cách triển khai trình xử lý sự kiện cho hộp kiểm.

void CMFCControlManagementDlg::OnBnClickedCheck1() {
   // TODO: Add your control notification handler code here
   UpdateData(TRUE);
   if (m_enableDisableVal)
      m_myEditControl.EnableWindow(TRUE);
   else
      m_myEditControl.EnableWindow(FALSE);
}

Bước 19 – Chúng ta cần thêm đoạn mã sau vào CMFCControlManagementDlg::OnInitDialog(). Khi hộp thoại được tạo, nó sẽ quản lý các điều khiển này.

UpdateData(TRUE);
if (m_enableDisableVal)
   m_myEditControl.EnableWindow(TRUE);
else
   m_myEditControl.EnableWindow(FALSE);

Bước 20 – Đây là phần triển khai hoàn chỉnh của tệp CMFCControlManagementDlg.cpp.

// MFCControlManagementDlg.cpp : implementation file
//

#include "stdafx.h"
#include "MFCControlManagement.h"
#include "MFCControlManagementDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialogEx {
   public:
      CAboutDlg();

   // Dialog Data
   #ifdef AFX_DESIGN_TIME
      enum { IDD = IDD_ABOUTBOX };
   #endif

   protected:
      virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
	
   // Implementation
   protected:
      DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) {

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX) {
   CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
CMFCControlManagementDlg::CMFCControlManagementDlg(CWnd* pParent /* = NULL*/)
   : CDialogEx(IDD_MFCCONTROLMANAGEMENT_DIALOG, pParent), 
   m_enableDisableVal(FALSE), m_editControlVal(_T("")) {
  
   m_hIcon = AfxGetApp()→LoadIcon(IDR_MAINFRAME);
}
void CMFCControlManagementDlg::DoDataExchange(CDataExchange* pDX) {
   CDialogEx::DoDataExchange(pDX);
   DDX_Control(pDX, IDC_CHECK1, m_enableDisableCheck);
   DDX_Control(pDX, IDC_EDIT1, m_myEditControl);
   DDX_Check(pDX, IDC_CHECK1, m_enableDisableVal);
   DDX_Text(pDX, IDC_EDIT1, m_editControlVal);
}

BEGIN_MESSAGE_MAP(CMFCControlManagementDlg, CDialogEx)
   ON_WM_SYSCOMMAND()
   ON_WM_PAINT()
   ON_WM_QUERYDRAGICON()
   ON_BN_CLICKED(IDC_CHECK1, &CMFCControlManagementDlg::OnBnClickedCheck1)
END_MESSAGE_MAP()


// CMFCControlManagementDlg message handlers

BOOL CMFCControlManagementDlg::OnInitDialog() {
   CDialogEx::OnInitDialog();
	
   // Add "About..." menu item to system menu.
	
   // IDM_ABOUTBOX must be in the system command range.
   ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
   ASSERT(IDM_ABOUTBOX < 0xF000);
	
   CMenu* pSysMenu = GetSystemMenu(FALSE);
   if (pSysMenu != NULL) {
      BOOL bNameValid;
      CString strAboutMenu;
      bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
      ASSERT(bNameValid);
      if (!strAboutMenu.IsEmpty()) {
         pSysMenu->AppendMenu(MF_SEPARATOR);
         pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
      }
   }

   // Set the icon for this dialog. The framework does this automatically
   // when the application's main window is not a dialog
   SetIcon(m_hIcon, TRUE);      // Set big icon
   SetIcon(m_hIcon, FALSE);     // Set small icon

   // TODO: Add extra initialization here
   UpdateData(TRUE);
   if (m_enableDisableVal)
      m_myEditControl.EnableWindow(TRUE);
   else
      m_myEditControl.EnableWindow(FALSE);
   return TRUE; // return TRUE unless you set the focus to a control
}

void CMFCControlManagementDlg::OnSysCommand(UINT nID, LPARAM lParam) {
   if ((nID & 0xFFF0) == IDM_ABOUTBOX) {
      CAboutDlg dlgAbout;
      dlgAbout.DoModal(); 
   }else {
      CDialogEx::OnSysCommand(nID, lParam);
   }
}
  
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.

void CMFCControlManagementDlg::OnPaint() {
   if (IsIconic()) {
      CPaintDC dc(this); // device context for painting

      SendMessage(WM_ICONERASEBKGND,
         reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
			
      // Center icon in client rectangle
      int cxIcon = GetSystemMetrics(SM_CXICON);
      int cyIcon = GetSystemMetrics(SM_CYICON);
      CRect rect;
      GetClientRect(&rect);
      int x = (rect.Width() - cxIcon + 1) / 2;
      int y = (rect.Height() - cyIcon + 1) / 2;

      // Draw the icon
      dc.DrawIcon(x, y, m_hIcon);
   }else{
      CDialogEx::OnPaint();
   }
}

// The system calls this function to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CMFCControlManagementDlg::OnQueryDragIcon() {
   return static_cast<HCURSOR>(m_hIcon);
}
void CMFCControlManagementDlg::OnBnClickedCheck1(){
   // TODO: Add your control notification handler code here
   UpdateData(TRUE);
   if (m_enableDisableVal)
      m_myEditControl.EnableWindow(TRUE);
   else
      m_myEditControl.EnableWindow(FALSE);
}

Bước 21 – Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy đầu ra sau. Bây giờ bạn có thể thấy hộp kiểm được bỏ chọn theo mặc định. Điều này vô hiệu hóa kiểm soát chỉnh sửa.

MFC - Danh sách hình ảnh

Bước 22 – Bây giờ khi bạn chọn hộp kiểm, kiểm soát chỉnh sửa được bật.

MFC - Danh sách hình ảnh

MFC – Danh sách hình ảnh (xem thêm)

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