MFC程序员的WTL指南(5)对话框与控件

http://tech.ddvip.com   2006年07月22日    社区交流

本文详细介绍MFC程序员的WTL指南(5)对话框与控件

#define _ATL_USE_DDX_FLOAT

  这个定义是必要的,因为默认状态为了优化程序的大小而不支持浮点数。

  有关 DoDataExchange()的详细内容

  调用DoDataExchange()方法和在MFC中使用UpdateData()一样,DoDataExchange()的函数原型是:

BOOL DoDataExchange ( BOOL bSaveAndValidate = FALSE, UINT nCtlID = (UINT)-1 );

  参数:

bSaveAndValidate 指示数据传输方向的标志。TRUE表示将数据从控件传输给变量,FALSE表示将数据从变量传输给控件。需要注意得是这个参数的默认值是FALSE,而MFC的UpdateData()函数的默认值是TRUE。为了方便记忆,你可以使用DDX_SAVE 和 DDX_LOAD标号(它们分别被定义为TRUE和FALSE)。 nCtlID 使用-1可以更新所有控件,如果只想DDX宏作用于一个控件就使用控件的ID。

  如果控件更新成功DoDataExchange()会返回TRUE,如果失败就返回FALSE,对话框类有两个重载函数处理数据交换错误。一个是OnDataExchangeError(),无论什么原因的错误都会调用这个函数,这个函数的默认实现在CWinDataExchange中,它仅仅是驱动PC喇叭发出一声蜂鸣并将出错的控件设为当前焦点。另一个函数是OnDataValidateError(),但是要到本文的第五章介绍DDV时才用得到。

  使用DDX

  在CMainDlg中添加几个变量,演示DDX的使用方法。

class CMainDlg : public ...
{
//...
  BEGIN_DDX_MAP(CMainDlg)
    DDX_CONTROL(IDC_EDIT, m_wndEdit)
    DDX_TEXT(IDC_EDIT, m_sEditContents)
    DDX_INT(IDC_EDIT, m_nEditNumber)
  END_DDX_MAP()
protected:
  // DDX variables
  CString m_sEditContents;
  int   m_nEditNumber;
};

  在OK按钮的处理函数中,我们首先调用DoDataExchange()将将edit控件的数据传送给我们刚刚添加的两个变量,然后将结果显示在列表控件中。

作者:Orbit(桔皮干了)    责编:豆豆技术应用

正在加载评论...