WEB开发网
开发学院软件开发VC MFC程序员WTL指南(6)高级对话框用户界面类 阅读

MFC程序员WTL指南(6)高级对话框用户界面类

 2008-01-19 20:25:19 来源:WEB开发网   
核心提示:ControlMania2有一个ID是IDC_FAV_SEASON的edit box,它和成员变量m_nSeason相关联,MFC程序员WTL指南(6)高级对话框用户界面类(11),由于有效的值是1到7,所以使用这样的数据验证宏:BEGIN_DDX_MAP(CMainDlg) //... DDX_INT_RANGE(I

ControlMania2有一个ID是IDC_FAV_SEASON的edit box,它和成员变量m_nSeason相关联。

由于有效的值是1到7,所以使用这样的数据验证宏:

BEGIN_DDX_MAP(CMainDlg)
   //...
     DDX_INT_RANGE(IDC_FAV_SEASON, m_nSeason, 1, 7)
   END_DDX_MAP()

OnOK()调用DoDataExchange()获得season的数值,并验证是在1到7之间。

处理DDV验证失败

如果控件的数据验证失败,CWinDataExchange会调用重载函数OnDataValidateError(),默认到处理是驱动PC喇叭发出声音,你可能想给出更友好的错误指示。OnDataValidateError()的函数原型是:

void OnDataValidateError ( UINT nCtrlID, BOOL bSave, _XData& data );

_XData是一个WTL的内部数据结构,CWinDataExchange根据输入的数据和允许的数据范围填充这个数据结构。下面是这个数据结构的定义:

struct _XData
{
   _XDataType nDataType;
   union
   {
     _XTextData textData;
     _XIntData intData;
     _XFloatData floatData;
   };
};

nDataType指示联合中的三个成员那个是有意义的,nDataType 的取值可以是:

enum _XDataType
{
   ddxDataNull = 0,
   ddxDataText = 1,
   ddxDataInt = 2,
   ddxDataFloat = 3,
   ddxDataDouble = 4
};

在我们的例子中,nDataType的值是ddxDataInt,这表示_XData中的_XIntData成员是有效的,_XIntData是个简单的数据结构:

struct _XIntData
{
   long nVal;
   long nMin;
   long nMax;
};

我们重载OnDataValidateError()函数,显示错误信息并告诉用户允许的数值范围:

void CMainDlg::OnDataValidateError ( UINT nCtrlID, BOOL bSave, _XData& data )
{
CString sMsg;
   sMsg.Format ( _T("Enter a number between %d and %d"),
          data.intData.nMin, data.intData.nMax );
   MessageBox ( sMsg, _T("ControlMania2"), MB_ICONEXCLAMATION );
   ::SetFocus ( GetDlgItem(nCtrlID) );
}

_XData中的另外两个结构_XTextData和_XFloatData的定义在atlddx.h中,感兴趣的话可以打开这个文件查看一下。

改变对话框的大小

WTL引起我的注意的第一件事是对可调整大小对话框的内建的支持。在这之前我曾写过一篇关于这个主题的文章,详情请参考这篇文章。简单的说就是将CDialogResize类添加到对话框的集成列表,在OnInitDialog()中调用DlgResize_Init(),然后将消息链入CDialogResize。

继续

下一章,我将介绍如何在对话框中使用ActiveX控件和如何处理控件触发的事件。

参考

Using WTL''s Built-in Dialog Resizing Class - Michael Dunn

Using DDX and DDV with WTL - Less Wright

修改记录

2003年4月28日,本文第一次发表。

上一页  6 7 8 9 10 11 

Tags:MFC 程序员 WTL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接