复选框是Windows控件,允许用户将项目的值设置或更改为true或false。
让无涯教程创建一个新的基于MFC对话框的项目。
创建项目后,您将在设计器窗口中看到以下对话框。
步骤1 - 删除TODO行,并拖动一个复选框和一个Edit控件,如以下快照所示。还将复选框的标题更改为"Enable Control"。
步骤2 - 右键单击复选框,然后选择添加变量。
步骤3 - 您可以在此对话框上选择其他选项。对于复选框,默认情况下选择CButton变量类型。
步骤4 - 同样,默认情况下也选择控件ID。现在,无涯教程需要在“Category”组合框中选择“Box”,然后在“Variable Name”编辑框中键入m_enableDisableCheck,然后单击“Finish”。
步骤5 - 使用如下快照所示的设置添加Edit控件的控件变量。
步骤6 - 观察对话框类的头文件,您可以看到现在已经添加了这两个变量。
CButton m_enableDisableCheck; CEdit m_myEditControl;
步骤7 - 右键单击复选框,然后选择添加变量。
步骤8 - 单击完成以继续。
步骤9 - 使用以下快照中所示的设置为Edit控件添加值Variable。
步骤10 - 观察头文件。您可以看到现在已经添加了新变量。
bool m_enableDisableVal; CString m_editControlVal;
步骤11 - 现在,无涯教程将为复选框添加事件处理程序。
步骤12 - 右键单击要处理其通知事件的控件。
步骤13 - 在“Message Type”框中选择事件以添加到在“类”列表框中选择的类。
步骤14 - 在"Function handler name"框中接受默认名称,或提供您选择的名称。
步骤15 - 单击添加并编辑以添加事件处理程序。
步骤16 - 现在,您可以看到在CMFCControlManagementDlg.cpp文件末尾添加了以下事件。
void CMFCControlManagementDlg::OnBnClickedCheck1() { //TODO: Add your control notification handler code here }
步骤17 - 选enables/disables选中复选框时,将checked/unchecked编辑控件。
步骤18 -现在添加了复选框click事件处理程序,这是复选框事件处理程序的实现。
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 - 编译并执行上述代码后,您将看到以下输出,现在,您可以看到默认情况下未选中该复选框。这将禁用编辑控件。
参考链接
https://www.learnfk.com/mfc/mfc-checkboxes.html
标签:控件,MFC,CMFCControlManagementDlg,步骤,无涯,复选框,Checkboxes,CDialogEx,TRUE From: https://blog.51cto.com/u_14033984/8778173