您的位置:首页 > 其它

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

2010-07-23 11:27 295 查看

利用winx的DDX机制得到,设置、得到edit控件内容

目的 利用DDX便利性,进行edit控件内容的设置和获取 原理 WTL提供了一个模板类来单独处理DDX机制,该类为: // CWinDataExchange - provides support for DDX template  class CWinDataExchange Winx自该类继承了一个新类: template  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

问题 MFC的UpdateData函数,并没有指定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宏处理。就不再多说什么了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: