设为首页 加入收藏

TOP

MFC程序员的WTL指南之高级界面类(六)
2012-11-04 14:13:07 来源: 作者: 【 】 浏览:1685
Tags:MFC 程序员 WTL 指南 高级 界面
  处理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。
首页 上一页 3 4 5 6 7 8 9 下一页 尾页 6/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇VC下利用OpenGL构造自由型曲线曲面 下一篇Visual C++ MFC 中常用宏的含义

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: