您的位置:首页 > 其它

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

2010-07-23 11:25 295 查看

利用winx的command宏处理按钮事件

目的 利用winx的便利性进行按钮事件处理 原理介绍 Winx提供了以下几个宏来处理菜单,控件等的命令消息 WINX_CMDS_BEGIN WINX_CMD WINX_CMDS_END 用法 在窗口类定义中,如这样写: WINX_CMDS_BEGIN();     WINX_CMD(IDC_TODO, OnCmdTodo);     WINX_CMD(ID_HELP_ABOUT, OnCmdAbout); WINX_CMDS_END();  宏WINX_CMD带有两个参数,前一个是控件ID,后一个是处理此命令消息的函数。当该控件被单击时,就调用这个消息处理函数。  我们在定义消息处理函数名前用到了winx_msg宏,winx_msg宏的定义如下: #define winx_msg    winx_call 宏winx_call的定义如下: #define winx_call   __fastcall __fastcall是另一种不同于__cdecl和__stdcall的函数调用规范,它速度快,使用寄存器来传递参数。要知道详细信息,可以网上搜索。不过我们不用关心它,我们只要在定义消息处理函数名前加上winx_msg宏就可以了。(注:WinX并不依赖于__fastcall,意思就是说,不写调用方式也可以) 上面部分引用:http://blog.csdn.net/ken0426/archive/2006/11/28/1419023.aspx 步骤 注释掉我们自己写的OnCommand函数 新增下列代码 WINX_CMDS_BEGIN() WINX_CMD(IDC_BUTTON1, OnCmdButton1) WINX_CMDS_END() void OnCmdButton1(HWND hWnd) { MessageBox( _T("yes") ); } 结果 编译运行正常。 分析 这些宏起到了什么作用?背后的机理是什么?其实很简单,看看宏的实现是什么就真相大白了。 #define WINX_CMDS_BEGIN() / public: / BOOL winx_msg OnCommand( / HWND hWnd, WPARAM wParam, HWND hWndCtlFrom) / { BEGIN仅仅是对函数定义的替换而已。还是实现了OnCommand函数。 #define WINX_CMD(nID, Function) / if (LOWORD(wParam) == (nID)) { / Function(hWnd); return TRUE; / } CMD也仅仅是对比下ID后调用处理函数而已。 #define WINX_CMDS_END() / return BaseClass::OnCommand(hWnd, wParam, hWndCtlFrom); / } END呢,也仅仅是调用了基类的OnCommand来处理一些默认的事件。并将函数闭合而已。 哈哈,实在是太明白不过了。

获取编辑框内容

目的 在对话框上增加编辑框,并通过程序获得用户输入的文字 思考 一般得到空间文字,是通过GetDlgItemText函数完成的,该函数原型为: UINT GetDlgItemText( HWND hDlg,     int nIDDlgItem,     LPTSTR lpString,     int nMaxCount ); 显然,可以在按钮事件里处理了。 我在试验的时候,发现GetDlgItemText已经被winx给包装好了。嗯,其实前面例子中的Messagebox也是包装过的。 另外,字符串类,也直接使用了WTL::CString了。 步骤 在资源编辑界面,往对话框上托一个编辑框IDC_EDIT_SRC 在按钮事件处理函数中,修改代码为: void OnCmdButton1(HWND hWnd) { winx::CString strText= GetDlgItemText( IDC_EDIT_SRC); MessageBox( strText ); } 编译ok。 举一反三 编辑框内容获取有Get,设置内容自然有Set了。SDK的Set函数为: BOOL SetDlgItemText( HWND hDlg,     int nIDDlgItem,     LPCTSTR lpString ); 我猜测,winx应该包装了它,肯定有一个函数是: SetDlgItemText(ID,CString); 嗯,我试验了下,我错了。请自行试验。 奢望 通过Set/GetDlgItemText的方式虽然能得到控件内容,可是MFC用DDX的方式,方便不了少,winx有无此考虑呢? 答案是肯定的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: