Step by step——WinX开发入门教程-5

利用winxDDX机制得到,设置、得到edit控件内容

目的

利用DDX便利性,进行edit控件内容的设置和获取

原理

WTL提供了一个模板类来单独处理DDX机制,该类为:

// CWinDataExchange - provides support for DDX

template <class T>

class CWinDataExchange

Winx自该类继承了一个新类:

template <class T>

class WinDataExchange : public WTL::CWinDataExchange

某对话框类如果要使用DDX机制,则应该使用多继承机制,继承WinDataExchange 

DDX机制本质,实际上是帮我们调用GetDlgItemText函数的封装而已。

步骤

新增加IDC_EDIT_SRC对应的字符串成员变量winx::CString m_strSrc;

新增CMyDialog的父类,如下:

class CMyDialog : public winx::ModelDialog

,public winx::WinDataExchange

在按钮事件中,利用DDX_Text函数,得到控件内容:

void OnCmdButton1(HWND hWnd)

{

DDX_Text(IDC_EDIT_SRC, m_strSrc,0,TRUE);

MessageBox( m_strSrc );

}

分析

可以看出,这方法简便是简便,但跟MFC还是有很大不一样。如果有多个地方需要设置得到控件内容,那每次都要调用一次DDX_Text,比较麻烦,如何才能像MFC那样,每次需要DDX的时候,调用一个函数UpdateData即可完成呢?请看下回分解:利用winx DDX宏处理DDX

利用winx DDX宏处理DDX

问题

MFCUpdateData函数,并没有指定Update哪个控件,所以MFC是把能DDX的都DDX掉吧。一个问题,对话框上有这么多的控件,怎么得到这么些控件的ID并一一的进行DDX_Text呢?

原理

Winx 提供了几个跟DDX相关的宏。如下:

#define WINX_DDX_BEGIN() BEGIN_DDX_MAP(void)

#define WINX_DDX_TEXT(nID, var) DDX_TEXT(nID, var)

#define WINX_DDX_TEXT_LEN(nID, var, len) DDX_TEXT_LEN(nID, var, len)

#define WINX_DDX_INT(nID, var) DDX_INT(nID, var)

#define WINX_DDX_INT_RANGE(nID, var, min, max) DDX_INT_RANGE(nID, var, min, max)

#define WINX_DDX_UINT(nID, var) DDX_UINT(nID, var)

#define WINX_DDX_UINT_RANGE(nID, var, min, max) DDX_UINT_RANGE(nID, var, min, max)

#define WINX_DDX_CHECK(nID, var) DDX_CHECK(nID, var)

#define WINX_DDX_RADIO(nID, var) DDX_RADIO(nID, var)

#define WINX_DDX_END() END_DDX_MAP()

BEGIN

#define BEGIN_DDX_MAP(thisClass) /

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

{ /

bSaveAndValidate; /

nCtlID;

DDX_TEXT:

#define DDX_TEXT(nID, var) /

if(nCtlID == (UINT)-1 || nCtlID == nID) /

{ /

if(!DDX_Text(nID, var, sizeof(var), bSaveAndValidate)) /

return FALSE; /

}

END

#define END_DDX_MAP() /

return TRUE; /

}

嗯,还是老一套。

什么时候需要更新数据了,就调用DoDataExchange函数就可以了。

步骤

代码如下:

WINX_DDX_BEGIN()

WINX_DDX_TEXT(IDC_EDIT_SRC,m_strSrc)

WINX_DDX_END()

void OnCmdButton1(HWND hWnd)

{

DoDataExchange( TRUE );

MessageBox( m_strSrc );

}

winx开发基于对话框程序总结

走到这里,基本上,用Winx开发基于对话框的程序,就比较简单了。简单总结如下:

新建一对话框资源模板,拖拉布置控件位置及设置ID

新建一对话框类,继承于winx::ModelDialog 在模板参数中,将对话框ID传递与资源模板关联。

消息处理

按钮事件,菜单事件,以OnCommand函数处理之,有WINX_CMDS_BEGIN宏辅助之。

系统命令,有WINX_SYSCMD_BEGIN辅助之,请照葫芦画瓢处理之。

类似的宏记录如下,请自行研究。

// Unify style of map macro, such as:

//  WINX_TEST_SUITE/WINX_TEST/WINX_TEST_SUITE_END;

//  WINX_CMDS_BEGIN/WINX_CMD/WINX_CMDS_END;

//  WINX_SYSCMD_BEGIN/WINX_SYSCMD/WINX_SYSCMD_END;

//  WINX_NOTIFY_BEGIN/WINX_NOTIFY/WINX_NOTIFY_END;

//  WINX_REFLECT_NOTIFY_BEGIN/WINX_REFLECT_NOTIFY/WINX_REFLECT_NOTIFY_END;

至此,则对话框控件及相关事件处理没有问题。

DDX相关,有DDX宏处理。就不再多说什么了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值