MFC常用函数

1.CDialog(CTestDlg::IDD, pParent)

 

       在CMyDlg.h中有定义,其实这里的IDD就是指的是你设计的Dialog,你可以到资源视图下看Dialog的名称。

 

2.DoDataExchange

 
MSDN是这样描述的:Called by the framework to exchange and validate dialog data.大意是框架调用此函数来改写与确认对话框数据。
       它是专门用于对话框控件和成员变量交换的函数
在调用UpdateData时会调用
注意到你程序里的DDX_Control(id,var)没有,他用于一些控件的动态数据交换,比如你在对话框中加一个editBox 在classWizard里的member variable 里将editBox的id和一个CEditBox类型变量m_edit相关联 这样在程序运行的时候,你可以通过对m_edit的操作来接受你在editBox里的输入
      
 
   (1)  DDX_Control
DDX_Control
void AFXAPI DDX_Control(CDataExchange* pDX, int nIDC, CWnd& rControl );
参数: pDX是 指向CDataExchange对象的指针。这种结构为指定对象提供了建立数据交换的环境,也包括结构的指向。
nIDC 子控件类的资源ID继承控件的属性。
rControl 对对话框成员变量的一个引用,形成视图资源,或者控制数据被交换的视图对象。
说明:
DDX_Control函数管理着在对话框、表格视或控件视中被子类化的控件与对话框、表格视或控件视的CWnd数据成员之间的数据交换。
有关DDX的更多信息参见《Visual C++程序员指南》中的“对话框数据交换和校验”和《Visual C++教程》中的“加入对话框”。
用例:
void Cdialog2Dlg::DoDataExchange(CDataExchange* pDX)
  {
  CDialog::DoDataExchange(pDX);
  DDX_Control(pDX, IDC_EDIT, m_Edit);
  //IDC_EDIT是树控件的ID,m_Edit是树控件对应类的对象
  }
  通俗的说:
1.将变量m_Edit和控件IDC_EDIT进行绑定
2.通过修改变量的数值控制控件操作。
 
 
(2)DDX_Text
 
 

参数

pDX 指向CDataExchange对象的指针。框架提供了这个对象,用于建立数据交换的环境,包括其方向。
nIDC 对话框、表格视图或控件视图中编辑控件的ID。
value 对对话框、表格视图或控件视图对象的成员变量的引用,其类型取决于你使用了DDX_Text的哪一个重载版本。

说明

DDX_Text函数管理着对话框、表格视或控件视对象中的编辑控件与对话框、表格视或控件视对象的CString型数据成员之间的int,UINT,long,DWORD,CString,float或double型数据交换。
关于DDX的更多信息参见Visual C++联机教程中的“加入对话框”和Visual C++程序员联机指南中的“对话框数据交换与校验”。[1]

      与DDX_Control 的区别

       DDX_TEXT()的作用可以理解为把字符串变量和控件的文本(WindowText)关联起来,DDX_Control()的作用可以理解为把变量和控件本身关联起来, DoDataExchange(pDX)就是处理所有变量与其关联控件交换数据的函数。
void CView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
DDX_Text(pDX, IDC_ID_VALUE, m_strID);
DDX_Control(pDX, IDC_ID_VALUE, m_editID);
}
在程序中通过update(TRUE)取得控件上的值到m_strID,处理修改后通过update(FALSE)传回控件,界面显示通过m_editID.GetWindText(str),取得值,处理后,通过m_editID.SetWindText(str)传回控件界面显示。
 
 
(3)BEGIN_MESSAGE_MAP
1简单用法:编辑 
BEGIN_MESSAGE_MAP(CpassApp, CWinApp)
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
这些都是宏定义,不是函数。 
在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()之间添加你的消息响应函数,为每个消息处理函数加入一个入口
BEGIN_MESSAGE_MAP( theClass, baseClass )

2参数:编辑

theClass 
指定消息映射所属的类的名字。 
baseClass 
指定theClass的基类的名字。 

3说明:编辑

使用BEGIN_MESSAGE_MAP宏开始你的消息映射的定义。
在你的类的成员函数的实现文件(.CPP)中,使用BEGIN_MESSAGE_MAP宏开始消息映射,然后为每个消息处理函数加入一个入口,最后用END_MESSAGE_MAP宏结束消息映射。
每个消息映射入口的格式如下:
ON_Notification(id, memberFxn)
其中id指定了发送通知的控件的子窗口的ID,而memberFxn指定了处理该通知的父对象中的成员函数名。
父对象的函数原型格式如下:
afx_msg void memberFxn( );
可能的消息映射入口如下:
映射入口
何时向父对象发送消息
ON_BN_CLICKED 
用户单击按钮时
ON_BN_DOUBLECLICKED
用户双击按钮时 

4举例:编辑

1 BEGIN_MESSAGE_MAP(CpassDlg, CDialog)
2 ON_WM_SYSCOMMAND()
3 ON_WM_PAINT()
4 ON_WM_QUERYDRAGICON()
5 //}}AFX_MSG_MAP
6 ON_BN_CLICKED(IDOK, OnOK)
7 ON_BN_CLICKED(IDCANCEL, OnExit)
8 END_MESSAGE_MAP()
void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
这个函数响应系统控制菜单的命令.(即左上角图标处)。
OnSysCommand:The framework calls this member function when the user selects a command from the Control menu, or when the user selects the Maximize or the Minimize button.

5另外:编辑

DoDataExchange:当UpdateData时候
OnInitDialog:对话框类已经构造,但是对话框还没有显示出来的时候
 
 
 
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章