代码改变世界

Menu实现逻辑

2013-11-21 22:20 by Clingingboy, 127 阅读, 收藏, 编辑
摘要: 一.前奏 创建一个WS_EX_NOACTIVATE的窗体 创建窗体后注册Hook消息(鼠标在非Menu区域点击时关闭menu,接收键盘消息用于快捷键,接WM_SETFOCUS消息,当打开新窗体时关闭menu) 接LButtonClick(在LButtonUp触发)消息,按下按钮后关闭menu 二.Menu快捷键逻辑 采纳从Enter键之后的快捷键+自定义...阅读全文

控件保持多种绘图状态的做法

2013-11-21 15:03 by Clingingboy, 124 阅读, 收藏, 编辑
摘要: 基本思路 #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, 163 阅读, 收藏, 编辑
摘要: 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, 112 阅读, 收藏, 编辑
摘要: 记录下思想 适用于业务逻辑相对单纯的一些画法,比如画背景(颜色,背景,边框等) 一个Draw方法中如果绘制比较复杂的话,就会导致代码混乱,而不灵活,每次需求更改就得重新画过,可重用性差. 以接口的方式可以很好的重复利用功能,不必因为需求的更改而大量变更代码 chrome的方法定义如下 // Painting ----------------------------------...阅读全文

DirectUI消息循环的简单封装

2013-11-09 13:56 by Clingingboy, 454 阅读, 收藏, 编辑
摘要: 一.真窗体和假窗体 首先在DirectWindow内部创建一个真窗体(基于WTL),可以接收消息 class CMessageWindow : public CWindowImpl{public: CMessageWindow(); ~CMessageWindow(); BEGIN_MSG_MAP( CMessageWindow ) MESSAGE_RAN...阅读全文

c++以代理的方式来实现接口化编程

2013-11-05 14:13 by Clingingboy, 475 阅读, 收藏, 编辑
摘要: 假如你项目代码本身已经实现了很多的实体类,但并未采用接口,可以考虑以这种方式来实现接口化编程 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, 1447 阅读, 收藏, 编辑
摘要: 一.简单工厂 #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, 180 阅读, 收藏, 编辑
摘要: 一.定义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, 312 阅读, 收藏, 编辑
摘要: 1.定义预处理命令_ATL_ATTRIBUTES 2.在一个全局的Cpp文件里面配置module的attribute [module(dll, uuid = "{3845951F-15B8-4286-8E7D-E9D4F5C7B6CE}", name = "TestApp")]3.定义接口[ object, uuid("9F414A8A-1D5E-4aff-A60...阅读全文

c++内存管理的一些资料

2013-10-29 19:04 by Clingingboy, 148 阅读, 收藏, 编辑
摘要: C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区 如何动态调用DLL中的导出类 在dll中导出类,并结合继承带来的问题 如何更好的架构一个界面库,欢迎大家一起讨论 pimpl 【C++程序设计技巧】Pimpl机制 vec...阅读全文