科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件MFC程序员的WTL指南之高级界面类

MFC程序员的WTL指南之高级界面类

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文将介绍一些新类实现高级界面特性新类:控件自画和自定外观控件

作者:lithe 来源:blog 2007年10月19日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
处理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。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章