MFC原理简介,新手看懂MFC代码

  • 在编程时程序员会看到一个以工程名为类名的类创建的名为 theAPP 的对象,这个对象就是我们要写的程序。(该类是 CWinApp的派生类)
  • 上面提到的以工程名为类名的类有一个成员函数,其函数原型为

    BOOL InitInstance()

    该函数就是我们写程序体的地方,在这个函数中写一个MessageBox函数,那么你按F5时就会弹出一个消息框

  • 如何让自己写的程序弹出一个对话框呢?

    • 首先,需要添加对话框资源
    • 其次需要在上面提到的InitInstance()函数中写淡出对话框的代码
    • 使用CDialogEx创建一个对话框对象(参数为对话框ID)并调用DoModal成员函数,即可调用对话框

      CDialogEx dlg(对话框ID);
      dlg.DoModal();
    • 使用派生类时不需要传递参数,因为这个派生类的构造函数会自动向基类送参数

      CDialog dlg();        //CDialog是CDialogEx的派生类
      dlg.DoModal();
  • 基于对话框的MFC程序的构架一般是两个类,一个类是上面提到的会生成 theAPP 对象的类,另一个是写主对话框中的内容的类

  • 第二个类中需要编写消息处理函数,所谓消息处理函数举个例子就是,你点一下对话框中的确定按钮,然后程序实现什么功能

    简单来说,一个消息ID对应一个消息处理函数,就像这样:

    ON_BN_CLICKED(IDOK, &CMFC应用Dlg::OnBnClickedOk()

    IDOK这个消息对应OnBnClickedOk()函数

    • 在VS的类向导中可以看到所有以WM_为前缀的消息

    也有些函数没有对应的消息ID,因为与这些函数对应的消息是唯一的,无需使用消息ID来区分

总结一下

MFC的组成:
- 必须有一个CWinApp的派生类;
- 必须用派生类在全局定义一个对象theApp;
- 在派生类中必须重写InitInstance虚函数;
- MFC程序就用CWinApp派生类中的InitInstance虚函数作为主函数;

MFC对话框程序的消息处理(消息映射机制)
- 为一个对话框模板建立一个与之关联的CDialog或CDialogEx派生类;
- 在需要启动对话框用派生类定义一个对象,在用对象调用DoModal成员函数;
- MFC如果要处理一个消息,只要打开类向导,选择在下拉中这个对话框类;
- 在消息列表中就可以选择你需要的消息,双击即可建立消息映射函数;
- 消息映射函数就是:一个消息(和一个窗口)对应一个函数的地址

参考资料:
吕鑫MFC教程

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算器 mfc 代码 基于VC++简易计算器实验详细过程 硬件环境: 软件环境:WinXP+VC++6.0 一、实验目的:构造一个类似Windows自带的计算器一样的简易计算器,能够连续进行加、减、乘、除四则整数运算,并能随时清除计算结果进行下一次计算。 二、具体实验步骤: 1、添加编辑框对应的变量m_Display 2、添加运算符类型变量 char CompuType; //用于存储运算符类型 CString FirstInput; //用于保存运算符前面的输入值 3、添加各种按钮的单击事件处理方法的函数 控件名称列表: 主对话框标识:IDD_CALC_DIALOG 关于对话框标识:IDD_ABOUTBOX 编辑框: IDC_EDIT 运算符按钮标识: 加: IDC_BUTTONADD 减: IDC_BUTTONSUBTRACT 乘: IDC_BUTTONMULTIPLY 除: IDC_BUTTONDIVIDE 等于: IDC_BUTTONEQUER 0~9数字符按钮标识: 7:IDC_BUTTONSEVEN 8:DC_BUTTONEIGHT 9: IDC_BUTTONNINE 4:IDC_BUTTONFOUR 5:IDC_BUTTONFIVE 6:IDC_BUTTONSIX 1:C_BUTTONONE 2:IDC_BUTTONTWO 3:IDC_BUTTONTHREE 0:IDC_BUTTONZERO 清除按钮标识:IDC_BUTTONCLEAR 关于按钮标识:IDC_BUTTONABOUT 类的成员变量: class CCalcDlg : public CDialog { // Construction public: char CompuType; //用于存储运算符类型 CCalcDlg(CWnd* pParent = NULL); // standard constructor //… (省略) protected: CString FirstInput; //用于保存运算符前面的输入值 //… (省略) }; 按钮单击的事件对应方法程序列表: void CCalcDlg::OnButtonone() { // TODO: Add your control notification handler code here m_Display = m_Display+_T("1"); UpdateData(FALSE); } void CCalcDlg::OnButtontwo() { // TODO: Add your control notification handler code here m_Display = m_Display+_T("2"); UpdateData(FALSE); } void CCalcDlg::OnButtonthree() { // TODO: Add your control notification handler code here m_Display = m_Display+_T("3"); UpdateData(FALSE); } void CCalcDlg::OnButtonfour() { // TODO: Add your control notification handler code here m_Display = m_Display+_T("4"); UpdateData(FALSE); } void CCalcDlg::OnButtonfive() { // TODO: Add your control notification handler code here m_Display = m_Display+_T("5"); UpdateData(FALSE); } void CCalcDlg::OnButtonsix() { // TODO: Add your control notification handler code here m_Display = m_Display+_T("6"); UpdateData(FALSE); } void CCalcDlg::OnButtonseven() { // TODO: Add your control notification handler code here m_Display = m_Display+_T("7"); UpdateData(FALSE); } void CCalcDlg::OnButtoneight() { // TODO: Add your control notification handler code here m_Display = m_Display+_T("8"); UpdateData(FALSE); } void CCalcDlg::OnButtonnine() { // TODO: Add your control notification handler code here m_Display = m_Display+_T("9"); UpdateData(FALSE); } void CCalcDlg::OnButtonzero() { // TODO: Add your control notification handler code here m_Display = m_Display+_T("0"); UpdateData(FALSE); } void CCalcDlg::OnButtonadd() { // TODO: Add your control notification handler code here FirstInput = m_Display; m_Display = _T(""); UpdateData(FALSE); CompuType='+'; } void CCalcDlg::OnButtonsubtract() { // TODO: Add your control notification handler code here FirstInput = m_Display; m_Display = _T(""); UpdateData(FALSE); CompuType='-'; } void CCalcDlg::OnButtondivide() { // TODO: Add your control notification handler code here FirstInput = m_Display; m_Display = _T(""); UpdateData(FALSE); CompuType='/'; } void CCalcDlg::OnButtonmultiply() { // TODO: Add your control notification handler code here FirstInput = m_Display; m_Display = _T(""); UpdateData(FALSE); CompuType='*'; } void CCalcDlg::OnButtonequer() { // TODO: Add your control notification handler code here int TempResult; //定义存储结果的临时变量 int FirstInputValue,NewInputValue; //定义进行运算的临时变量 FirstInputValue=atoi(FirstInput.GetBuffer(24)); //将字符串变量转换成整型值 FirstInput.ReleaseBuffer(-1); NewInputValue=atoi(m_Display.GetBuffer(24)); //将字符串变量转换成整型值 m_Display.ReleaseBuffer(-1); switch(CompuType) //开关语句判断运算符类型 { case '+': TempResult = FirstInputValue + NewInputValue; //将加法运算结果传给出临时变量TempResult break; case '-': TempResult = FirstInputValue - NewInputValue; //将减法运算结果传给出临时变量TempResult break; case '*': TempResult = FirstInputValue * NewInputValue; //将乘法运算结果传给出临时变量TempResult break; case '/': TempResult = FirstInputValue / NewInputValue; //将除法运算结果传给出临时变量TempResult break; } sprintf(m_Display.GetBuffer(24),"%d",TempResult); //将运算结果变量值传递给出编辑控件变量m_Display m_Display.ReleaseBuffer(-1); UpdateData(FALSE); //刷新编辑控件变量,并在编辑框中显示运算结果 } void CCalcDlg::OnButtonclear() { // TODO: Add your control notification handler code here m_Display.Empty(); //清空存储在变量m_Display中的数据 UpdateData(FALSE); } void CCalcDlg::OnButtonabout() { // TODO: Add your control notification handler code here CAboutDlg DlgAbout; DlgAbout.DoModal();

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值