首页 > 其他分享 >无涯教程-MFC - Checkboxes函数

无涯教程-MFC - Checkboxes函数

时间:2023-12-11 23:32:05浏览次数:34  
标签:控件 MFC CMFCControlManagementDlg 步骤 无涯 复选框 Checkboxes CDialogEx TRUE

复选框是Windows控件,允许用户将项目的值设置或更改为true或false。

让无涯教程创建一个新的基于MFC对话框的项目。

创建项目后,您将在设计器窗口中看到以下对话框。

步骤1 - 删除TODO行,并拖动一个复选框和一个Edit控件,如以下快照所示。还将复选框的标题更改为"Enable Control"。

Checkbox

步骤2 - 右键单击复选框,然后选择添加变量。

Checkbox Add Member Var

步骤3 - 您可以在此对话框上选择其他选项。对于复选框,默认情况下选择CButton变量类型。

步骤4 - 同样,默认情况下也选择控件ID。现在,无涯教程需要在“Category”组合框中选择“Box”,然后在“Variable Name”编辑框中键入m_enableDisableCheck,然后单击“Finish”。

步骤5 - 使用如下快照所示的设置添加Edit控件的控件变量。

Checkbox Edit Control

步骤6 - 观察对话框类的头文件,您可以看到现在已经添加了这两个变量。

CButton m_enableDisableCheck;
CEdit m_myEditControl;

步骤7 - 右键单击复选框,然后选择添加变量。

Checkbox Add Variable

步骤8 - 单击完成以继续。

步骤9 - 使用以下快照中所示的设置为Edit控件添加值Variable。

Checkbox Edit Variable

步骤10 - 观察头文件。您可以看到现在已经添加了新变量。

bool m_enableDisableVal;
CString m_editControlVal;

步骤11 - 现在,无涯教程将为复选框添加事件处理程序。

步骤12 - 右键单击要处理其通知事件的控件。

Checkbox Event Handler

步骤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 - 编译并执行上述代码后,您将看到以下输出,现在,您可以看到默认情况下未选中该复选框。这将禁用编辑控件。

Edit Control DisableEdit Control Enabled

参考链接

https://www.learnfk.com/mfc/mfc-checkboxes.html

标签:控件,MFC,CMFCControlManagementDlg,步骤,无涯,复选框,Checkboxes,CDialogEx,TRUE
From: https://blog.51cto.com/u_14033984/8778173

相关文章

  • 无涯教程-MFC - Combo Boxes函数
    组合框由与静态控件或编辑控件组合的列表框组成,控件的列表框部分可能始终显示,或者仅在用户选择控件旁边的下拉箭头时才下拉。这是Combobox控件的消息映射列表-MessageMapentry描述CBN_DBLCLKON_CBN_DBLCLK(<id>,<memberFxn>)用户在组合框的列表框中双击一个字符串。C......
  • 无涯教程-MFC - List Box函数
    列表框显示用户可以查看和选择的项目列表,例如文件名,列表框由CListBox类表示,在单选列表框中,用户只能选择一项,在多选列表框中,可以选择一系列项目,当用户选择一个项目时,该项目将突出显示,并且列表框会将通知消息发送到父窗口。这是列表框的一些映射条目MessageMapentry描述LBN_......
  • 无涯教程-MFC - Command Button函数
    命令按钮是常规按钮的增强版本,它在左侧显示一个绿色箭头图标,后跟一个常规尺寸的标题,在主标题下,它可以显示另一个较小的标题,作为提示以提供更多信息。这是命令按钮控件的消息映射列表-MessageMapentry描述BN_CLICKEDON_BN_CLICKED(<id>,<memberFxn>)单击按钮时,框架将调......
  • 无涯教程-MFC - Static Text函数
    静态控件显示文本字符串,框,矩形,图标,光标,位图或增强型图元文件,它由CStatic类表示,它可用于标签,框或分离其他控件,静态控件通常不接受输入,也不提供输出。这是CStatic类中的方法列表-Sr.No.Name&描述1Create创建Windowsstatic控件并将其附加到CStatic对象。2DrawItem......
  • 无涯教程-MFC - Bitmap Button函数
    位图按钮在其脸上显示图片或图片和文本,这通常是为了使按钮略显,使用从CButton派生的CBitmapButton类创建位图按钮。这是CBitmapButton类中的方法的列表。Sr.No.Name&描述1AutoLoad将对话框中的按钮与CBitmapButton类的对象相关联,按名称加载位图,并调整按钮的大小以适合位......
  • 无涯教程-MFC - 库资源
    库是一组功能,类或其他资源,可用于需要已经实现的实体的程序,而无需了解这些功能,类或资源是如何创建的或如何创建的功能,库使程序员可以轻松地使用由另一个人或公司创建的函数,类和资源等,并相信此外部源是可靠且高效的。库分为两大类-静态库动态库静态库静态库是一个文件,其中包含......
  • 无涯教程-MFC - GDI
    Windows提供了在设备上下文中使用的各种绘图工具,它提供了用于绘制线条的笔,用于填充内部的画笔以及用于绘制文本的字体,MFC提供了等效于Windows中绘图工具的图形对象类。Drawing绘制设备上下文是Windows数据结构,其中包含有关设备(例如显示器或打印机)的图形属性的信息。所有绘图......
  • 无涯教程-MFC - 网络编程
    Microsoft提供了许多用于对客户端和服务器应用程序进行编程的API,正在为互联网编写许多新应用程序,并且随着技术,浏览器功能和安全选项的变化,将编写新类型的应用程序。MFC提供了一个CSocket类,用于使用WindowsSockets编写网络通信程序。这是CSocket类中方法的列表。Sr.No.Name......
  • 无涯教程-MFC - 文件系统
    在本章中,无涯教程将讨论文件系统的各个组成部分。Drives驱动驱动器是连接到计算机的物理设备,因此它可以存储信息,逻辑磁盘,逻辑卷或虚拟磁盘(简称VD或vdisk)是一种虚拟设备,可在计算机系统中的一个或多个物理磁盘驱动器上提供可用存储区域。驱动器可以是硬盘,CDROM,DVDROM,闪存(USB......
  • 无涯教程-MFC - 消息和事件
    应用程序由各种对象组成,大多数情况下,计算机上运行着多个应用程序,并且不断要求操作系统执行一些任务。Map消息由于Windows是面向消息的操作系统,因此Windows环境的大部分编程都涉及消息处理,每一个事件,例如一个键盘或鼠标点击发生时,一个消息被发送到该应用程序,然后必须处理该事件......