一些MFC笔记

Windows消息分类

       先讲下Windows消息的分类。Windows消息分为系统消息和用户自定义消息。Windows系统消息有三种:

       1.标准Windows消息。除WM_COMMAND外以WM_开头的消息是标准消息。例如,WM_CREATE、WM_CLOSE。

       2.命令消息。消息名为WM_COMMAND,消息中附带了标识符ID来区分是来自哪个菜单、工具栏按钮或加速键的消息。

       3.通知消息。通知消息一般由列表框等子窗口发送给父窗口,消息名也是WM_COMMAND,其中附带了控件通知码来区分控件。

 CWnd的派生类都可以接收到标准Windows消息、通知消息和命令消息。命令消息还可以由文档类等接收。

       用户自定义消息是实际上就是用户定义一个作为消息,此宏的值应该大于等于WM_USER,然后此宏就可以跟系统消息一样使用,窗口类中可以定义它的处理函数。


添加消息处理函数

1.在类定义中加入消息处理函数的函数声明,注意要以afx_msg打头。例如MainFrm.h中WM_CREATE的消息处理函数的函数声明:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);。

       2.在类的消息映射表中添加该消息的消息映射入口项。例如WM_CREATE的消息映射入口项:ON_WM_CREATE()。

       3.在类实现中添加消息处理函数的函数实现。例如,MainFrm.cpp中WM_CREATE的消息处理函数的实现:


MFC对话框

利用类添加向导

      1.在编辑框上点右键,在右键菜单中选择“Add Variable”。弹出添加成员变量的向导对话框。

       2.我们想为其添加值变量而不是控件变量,所以对话框中“Category”下的组合框中选择Value。

       3.“Variable type”下的组合框此时默认选中的是“CString”,CString是字符串类,显然不能进行加法运算。我们可以选择double、float、int等。这里我们选择double,即编辑框关联一个double类型的变量。

       4.在“Variable name”中写入自定义的变量名


对话框类的数据交换和检验

在DoDataExchange()函数中利用DDX_XXX来绑定对话框的控件程序的对象来实现数据的交换

DDX_Control(pDX, IDC_EDT_NAME, m_EDT_strName);
DDX_Text(pDX, IDC_EDT_NAME, m_strName);
  1. DDX_TEXT()可以认为是把字符串变量和控件的内容关联起来; 
  2. DDX_Control()可以认为是把变量和控件本身关联起来; 
  3. DoDataExchange(pDX)就是处理所有变量与其关联控件交换数据的函数。
DDX_TEXT()数据交换过程:
UpdateData(TRUE);//将控件的内容传回 m_strName;
m_strName = _T("关联变量");//修改值
UpdateData(FALSE);//将m_strName的值显示到控件

DDX_Control()数据交换过程:
CString str;
m_EDT_strName.GetWindowText(str);//得到控件的内容保存到str
str = _T("控件绑定变量");
m_EDT_strName.SetWindowText(str);//设置控件的内容为str

但是这种数据交换机制中,DoDataExchange()并不是被自动调用的,而是需要我们在程序中调用CDialogEx::UpdateData()函数,由UpdateData()函数再去自动调用DoDataExchange()的,如在按键消息处理函数中调用。

还有的是GetDlgItem(里面是ID标识符)是CWnd的一个成员函数,用来获取对话框中控件的指针

设置TAB顺序

在主菜单中选择“Format”->"Tab Order",或者按快捷键Ctrl+D,对话框模板上就会显示各个控件的Tab顺序数字。


模态对话框:

  1. CAdditionDlg dlg;        // 定义对话框类CAdditionDlg的对象dlg   
  2. m_pMainWnd = &dlg;       // 将dlg设为主窗口   
  3. INT_PTR nResponse = dlg.DoModal();   <
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值