随笔分类 -  directui

写自己的DirectUI遇到的问题和解决方案
摘要:在关于UI回调Invoker的实现(二)这一篇中,我说到了接口设计问题。一个对象,只能访问属于自己应该访问的方法,而对于不能访问不该访问的方法。其实,这是一句废话。怎么评判“什么方法应该访问,什么方法不应该访问”呢?如果一个类,public访问属性的方法全部是继承自接口的方法。那么,我认为这个接口没有任何意义。接口的意义在于,接口的客户,不知道接口是如何实现的。但是它仍然能通过接口的实例,访问(对应的)方法。如果代码有这样的例子,这跟把类的方法直接全部暴露给客户,没有区别。例如上篇文章给的例子。SetPressFunc这个方法,是button等有响应的窗口控件才有的,对于窗口本身没有任何意义( 阅读全文
posted @ 2013-11-01 20:32 ·若狂 阅读(549) 评论(0) 推荐(0) 编辑
摘要:上篇我说到,光有一个IOperation*的指针,是无法记录这么多事件的。由于无法确定要把回调绑定到哪个事件上,因此,我们需要引入一个中间的传递机制。没有看到前面的请先查阅上一篇关于UI回调Invoker的实现(一)问题回到,我怎么让InitControl(...)知道,我是SetPressFunc,还是SetItemChangeFunc,等等事件的回调。我初步的想法是:定义一个IAttacher接口:class IAttacher{public: virtual ~IAttacher() {}; virtual void AttachInvoker(IUIWnd* wnd) = 0;}; . 阅读全文
posted @ 2013-10-24 14:48 ·若狂 阅读(486) 评论(0) 推荐(0) 编辑
摘要:打算写一个DirectUI库,在写其中底层窗口的回调构造的时候遇到一个问题。Invoker是一个模板,因为closure的关系,它必须保存一个类对象的指针,和回调函数的地址。而函数调用的时候,就可以用一个通用的接口invoke就行了。接口的声明如下:class IOperation{public: virtual ~IOperation() {}; virtual void Invoke(IUIWnd* wnd, const EventArg& arg) = 0;}; 回调函数调用的时候,调用Invoke(...),传入(谁)那个窗口调用的,和调用的可能需要的数据。因为回调函数可能有不 阅读全文
posted @ 2013-10-24 12:49 ·若狂 阅读(486) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示