
- MFC 教程
- MFC - 首頁
- MFC - 概述
- MFC - 環境設定
- MFC - VC++ 專案
- MFC - 入門
- MFC - Windows 基礎
- MFC - 對話方塊
- MFC - Windows 資源
- MFC - 屬性表
- MFC - Windows 佈局
- MFC - 控制元件管理
- MFC - Windows 控制元件
- MFC - 訊息與事件
- MFC - ActiveX 控制元件
- MFC - 檔案系統
- MFC - 標準 I/O
- MFC - 文件檢視
- MFC - 字串
- MFC - CArray
- MFC - 連結串列
- MFC - 資料庫類
- MFC - 序列化
- MFC - 多執行緒
- MFC - 網際網路程式設計
- MFC - GDI
- MFC - 庫
- MFC 有用資源
- MFC - 快速指南
- MFC - 有用資源
- MFC - 討論
MFC - 複選框
複選框是一個 Windows 控制元件,允許使用者將專案的 value 設定或更改為真或假。
讓我們建立一個新的基於 MFC 對話方塊的專案。
專案建立後,您將在設計器視窗中看到以下對話方塊。
步驟 1 - 刪除 TODO 行,並拖動一個複選框和一個編輯控制元件,如下圖所示。同時將複選框的標題更改為“啟用控制元件”。

步驟 2 - 右鍵單擊複選框,然後選擇“新增變數”。

步驟 3 - 您可以在此對話方塊中選擇不同的選項。對於複選框,預設情況下選擇 CButton 變數型別。
步驟 4 - 同樣,控制元件 ID 也預設為選中狀態。現在,我們需要在“類別”組合框中選擇“控制元件”,在“變數名”編輯框中鍵入 m_enableDisableCheck,然後單擊“完成”。
步驟 5 - 使用以下快照中顯示的設定新增編輯控制元件的控制元件變數。

步驟 6 - 檢視對話方塊類的標頭檔案。您現在可以看到這兩個變數已新增。
CButton m_enableDisableCheck; CEdit m_myEditControl;
步驟 7 - 右鍵單擊複選框,然後選擇“新增變數”。

步驟 8 - 單擊“完成”繼續。
步驟 9 - 使用以下快照中顯示的設定新增編輯控制元件的值變數。

步驟 10 - 檢視標頭檔案。您現在可以看到新變數已新增。
bool m_enableDisableVal; CString m_editControlVal;
步驟 11 - 現在我們將為複選框新增事件處理程式。
步驟 12 - 右鍵單擊要處理通知事件的控制元件。

步驟 13 - 在“訊息型別”框中選擇要新增到“類”列表框中選擇的類中的事件。
步驟 14 - 接受“函式處理程式名稱”框中的預設名稱,或提供您選擇的名稱。
步驟 15 - 單擊“新增和編輯”以新增事件處理程式。
步驟 16 - 您現在可以在 CMFCControlManagementDlg.cpp 檔案的末尾看到以下新增的事件。
void CMFCControlManagementDlg::OnBnClickedCheck1() { // TODO: Add your control notification handler code here }
步驟 17 - 這會在選中/取消選中複選框時啟用/停用編輯控制元件。
步驟 18 - 我們現在已新增複選框單擊事件處理程式。以下是複選框事件處理程式的實現。
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); }
步驟 19 - 我們需要將以下程式碼新增到 CMFCControlManagementDlg::OnInitDialog()。建立對話方塊時,它將管理這些控制元件。
UpdateData(TRUE); if (m_enableDisableVal) m_myEditControl.EnableWindow(TRUE); else m_myEditControl.EnableWindow(FALSE);
步驟 20 - 以下是 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); }
步驟 21 - 編譯並執行上述程式碼後,您將看到以下輸出。您現在可以看到複選框預設情況下未選中。這將停用編輯控制元件。

步驟 22 - 現在,當您選中複選框時,編輯控制元件將被啟用。
