首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

如何设计GUI的消息回调

2014-07-22 
怎么设计GUI的消息回调本帖最后由 CKnightx 于 2013-09-13 16:15:08 编辑通常一个closure包含一个指向某类

怎么设计GUI的消息回调
本帖最后由 CKnightx 于 2013-09-13 16:15:08 编辑 通常一个closure包含一个指向某类实例的指针,和一个该类的成员函数

struct closure
{
CUIXXX_Obj;
void*_Func;
};


在写GUI的时候,假如窗口A是CXXXWnd的一个实例,窗口A上有5个button和2个ComboBox
我现在点击窗口A上的某个button,需要这个button响应 CXXXWnd::OnButtonAPressed(button* btn);
这个时候,closure的_Obj保存的是实例A的地址,_Func保存的是CXXXWnd::OnButtonAPressed的地址,

当消息传递到button上的时候,在button类里面处理click消息,找到对应的closure,执行 _Obj->*_Func(this)
思路是这样的。

我现在点击ComboBox的下拉列表框中的某一项(假设是第3项),需要响应CXXXWnd::OnItemChanged(ComboBox* combo, int index);然后在ComboBox的消息处理中,找到对应的closure,也是需要执行_Obj->*_Func(this, 3);

现在的问题是:我怎么告诉closure的_Func,指向的函数有些是带参数,有些不带参数,有些带好几个参数。 GUI C++ closure 函数指针
[解决办法]
那你每个combobxo的item就应该包含对应的函数指针
SetItemData(*ptr) comobox有这个绑定的功能
[解决办法]
 void*    _Func;
我觉得你这块能用 void* 那说明你也不知道_Func的实际的参数情况。
但是, 注册函数的用户调用函数的用户应该清楚实际的参数类型, 不然的话, 想MFC一样,给_Func做一个WParam, LParam参数。
所以这块可以用强制类型转换
因为_Func本质上是一块内存空间的地址……
[解决办法]
http://bbs.csdn.net/topics/390590608
我这边写了个Task类。可以扩展成支持N个参数。
[解决办法]
你可以看看 stl 里的 bind1st bind2nd,看看它是怎么用模板解决这样的问题的。
[解决办法]
引用:
Quote: 引用:

我就是通过看bind1st,然后自己也写了一个类似的

你可以看看我的写法。我觉得会简单一点


你直接使用函数指针的话,对于有参数有返回值的函数,如何拿到函数的返回值类型?如何传递参数类型?
[解决办法]
模拟printf

热点排行