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

利用winxcommand宏处理按钮事件

目的

利用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了。SDKSet函数为:

BOOL SetDlgItemText( HWND hDlg,     int nIDDlgItem,     LPCTSTR lpString );

我猜测,winx应该包装了它,肯定有一个函数是:

SetDlgItemText(ID,CString);

嗯,我试验了下,我错了。请自行试验。

奢望

通过Set/GetDlgItemText的方式虽然能得到控件内容,可是MFCDDX的方式,方便不了少,winx有无此考虑呢?

答案是肯定的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值