摘要:思路: 前提快捷键操作不可重复,即一个快捷键对应一个控件的动作 一个窗体保持一份快捷键的map映射 在相应的消息中获取快捷键列表如键盘消息 在控件类对象中定义一个默认的响应行为,比如Button按了Enter键 当子控件隐藏,父控件关系发生变化时则重新设置快捷键 阅读全文
Menu实现逻辑
2013-11-21 22:20 by Clingingboy, 380 阅读, 0 推荐, 收藏, 编辑
摘要:一.前奏 创建一个WS_EX_NOACTIVATE的窗体 创建窗体后注册Hook消息(鼠标在非Menu区域点击时关闭menu,接收键盘消息用于快捷键,接WM_SETFOCUS消息,当打开新窗体时关闭menu) 接LButtonClick(在LButtonUp触发)消息,按下按钮后关闭menu 二.Menu快捷键逻辑 采纳从Enter键之后的快捷键+自定义... 阅读全文
控件保持多种绘图状态的做法
2013-11-21 15:03 by Clingingboy, 341 阅读, 0 推荐, 收藏, 编辑
摘要:基本思路 #pragma once#include struct IPainter{ void Paint() {}};class Element{ void SetPainterState(int dwState, IPainter* pPainter) { m_mapStatePainter[dwState]=pPainter; if(dw... 阅读全文
2个函数宏技巧
2013-11-21 13:56 by Clingingboy, 569 阅读, 0 推荐, 收藏, 编辑
摘要:1.用宏调用对象函数 #define FOR_EACH_OBSERVER(ObserverType, observer_list, func) \ do{ \ CObserverListBase::Iterator it(observer_list); \ ObserverType* obs; \ while((obs=it.GetNext()) != ... 阅读全文
绘图 Painter转接口封装的方式
2013-11-21 11:52 by Clingingboy, 361 阅读, 0 推荐, 收藏, 编辑
摘要:记录下思想 适用于业务逻辑相对单纯的一些画法,比如画背景(颜色,背景,边框等) 一个Draw方法中如果绘制比较复杂的话,就会导致代码混乱,而不灵活,每次需求更改就得重新画过,可重用性差. 以接口的方式可以很好的重复利用功能,不必因为需求的更改而大量变更代码 chrome的方法定义如下 // Painting ----------------------------------... 阅读全文
DirectUI消息循环的简单封装
2013-11-09 13:56 by Clingingboy, 1133 阅读, 0 推荐, 收藏, 编辑
摘要:一.真窗体和假窗体 首先在DirectWindow内部创建一个真窗体(基于WTL),可以接收消息 class CMessageWindow : public CWindowImpl{public: CMessageWindow(); ~CMessageWindow(); BEGIN_MSG_MAP( CMessageWindow ) MESSAGE_RAN... 阅读全文
c++以代理的方式来实现接口化编程
2013-11-05 14:13 by Clingingboy, 1026 阅读, 0 推荐, 收藏, 编辑
摘要:假如你项目代码本身已经实现了很多的实体类,但并未采用接口,可以考虑以这种方式来实现接口化编程 struct ITest{ virtual void Test()=0;};class CTest{public: void Test() {}};class CTestProxy:public ITest{ void Test() { m_object... 阅读全文
c++对象工厂
2013-11-04 23:07 by Clingingboy, 2214 阅读, 0 推荐, 收藏, 编辑
摘要:一.简单工厂 #pragma oncestruct IObjectA{ virtual void Test1()=0;};class ObjectA:public IObjectA{public: virtual void Test1(){}};struct IObjectB{ virtual void Test2()=0;};class ObjectB:public I... 阅读全文
使用模板来解决接口继承问题
2013-11-04 20:14 by Clingingboy, 516 阅读, 0 推荐, 收藏, 编辑
摘要:一.定义2个有继承关系的接口 struct IA{ virtual void Test1()=0;};struct IB:public IA{ virtual void Test2()=0;};二.定义2个类来实现class A:public IA{ virtual void Test1() {}};class B:public IB{public: virtual... 阅读全文
VC++ 使用attributes定义接口
2013-11-04 19:26 by Clingingboy, 870 阅读, 0 推荐, 收藏, 编辑
摘要:1.定义预处理命令_ATL_ATTRIBUTES 2.在一个全局的Cpp文件里面配置module的attribute [module(dll, uuid = "{3845951F-15B8-4286-8E7D-E9D4F5C7B6CE}", name = "TestApp")]3.定义接口[ object, uuid("9F414A8A-1D5E-4aff-A60... 阅读全文