- 博客(20)
- 收藏
- 关注
转载 我在城市快节奏中的慢生活
1. 作息 我晚上睡觉一般是10点过,有时候可能11点过,偶尔9点过。早上起床有三个时间点:5:30,7:30,8:30。 05:30——起床 05:40——第一餐 05:50——出门 06:10——到达操场,开始锻炼(活动关节,赤脚慢跑热身,全身静态拉伸) 07:00——结束锻炼,回家 07:50——第二餐 08:30——到达公司...
2013-10-15 12:02:00
152
转载 任意类型对象Any
一个对象可以是任意类型,类似于同台语言的变量 any.h: /* * any.h * * Created on: 2012-3-31 * Author: vivence */#ifndef ANY_H_#define ANY_H_#include <utility>namespace ghost{class Any{ class HolderBase...
2012-03-31 16:44:00
157
转载 保罗万象的对象——Variant
对一个对象设置其可容纳的多种类型 通过类型对对象进行Set和Get,类型之间互不影响,一个类型只能又一个值 variant.h /* * variant.h * * Created on: 2012-3-9 * Author: vivence */#ifndef VARIANT_H_#define VARIANT_H_namespace ghost{template...
2012-03-09 10:43:00
141
转载 小对象内存池——减少内存碎片
根据不同的块大小来划分不同的内存块链形成内存池组 每个链节点(也称为块)容纳一个对象,是内存分配的最小单位,其大小为sizeof(long)的2的正整数次幂 实现中限制了块大小最大值以及在一个链中块个数最大值 利用了free block来存储下一个free_block地址,节约了free block链的存储空间 memory_pool_base.h: /* * memory...
2012-03-09 10:33:00
135
转载 AVL树(改)
分离了二叉树在控制台的打印实现 没有对节点的分配和释放进行抽象 BinaryTree.h #ifndef BINARY_TREE_H#define BINARY_TREE_H#include <cassert>#ifdef _PRINT#include <vector>#include <memory>#include <func...
2011-11-25 16:19:00
102
转载 二叉堆
BinaryHeap.h文件 #ifndef BINARY_HEAP_H #define BINARY_HEAP_H namespace ghost{ template<typename A> void MinHeapShiftUp(A& array, const size_t size, size_t n/*umber(not index)*/...
2011-11-25 15:38:00
61
转载 关于对程序员层次划分的问题,口水口水
最近转到新的领域进行开发,正在学习和摸索的过程中,也就少有来更新博客了。不过平常有一点点空闲时间还是会关注一些同行的文章,也常常看到一些关于对程序员层次划分的问题,今天也想就此喷点我自己的口水。 我见到的对程序员进行层次划分的文章通常是:XX语言程序员等级,XX技术开发人员层次等。这些文章的作者通常都将自己放在一个“上帝”的角度去描述,说XX语言(技术)程序员(开发人员)可以分为多少个...
2011-08-07 16:00:00
150
转载 AVL树
AVLTree.h文件 #ifndef AVL_TREE_H #define AVL_TREE_H #include <cassert> #include <algorithm> #ifdef _PRINT #include <vector> #include <iostream> #include <...
2011-06-17 14:53:00
79
转载 一步一步实现自己的模拟控件(9)——消息处理
这次我们将要给Widget增加一些状态,并使其能够接受出消息处理扩展,测试工程中实现了一个按钮的消息处理扩展。 Widget状态: 之前的控件只是绘制了一个边框,并且总是会在窗口中显示。实际上我们往往会希望能够让某个控件显示或者隐藏、可用或者不可用等等,那么控件应该具有能够标识这些状态的属性,于是我们给Widget增加了状态概念。 // 状态相关void AddStates(s...
2011-04-24 10:48:00
97
转载 一步一步实现自己的模拟控件(8)——重构
模拟控件已经出了雏形,是应该重构一下了。 新概念: 其实说是新概念也不尽然,只是在这几步的实现中可以发现,这个模拟控件框架中有两个大的概念:容器和控件。我们一直一来都说的是容器窗口,但是其实这是个可以上升的概念。容器容纳一个控件体系,也就是关联一个根控件,那么它就有点类似于我们的根控件了。但是容器由必须实现和具体窗口和控件的交互,所以我们不能简单的将根控件作为容器。并且对于某些特殊的...
2011-04-19 20:06:00
98
转载 一步一步实现自己的模拟控件(7)——可扩展布局子控件
可扩展: 要使得我们的控件具备一定的可扩展性,那么必定会产生控件之外的对象作为扩展,并且这个对象对于控件来说是可插入可移除的。用于扩展的对象和控件之间应该具备一定的关系,例如:1-1,1-n,n-n等。我们将这样的对象关系抽象了出来,称之为对象关系。 对象关系: 一个对象可能允许单个对象对其进行关联,也可能允许多个对象对其进行关联,甚至可能即允许多个对象进行关联,但却对某些类型的对...
2011-04-12 21:17:00
77
转载 一步一步实现自己的模拟控件(6)——控件树及控件区域
控件树 一步一步实现自己的模拟控件(1)中的图上我们可以看到,我们的控件体系其实就是一个控件树。每一个窗口关联一个根控件,所有控件都在这个根控件之下,父控件包容并管理子控件,那么我们的Widget就应该是一个树结点。一个树结点至少有对Parent和Chilren的设置和访问接口: void SetParent(Widget* const pNewParent);Widget*...
2011-04-09 19:05:00
93
转载 一步一步实现自己的模拟控件(5)——隐藏类
隐藏驱动类: 为了让用户有更简单的使用接口,我们需要把不必要的东西进行一定的隐藏。前面我就提到WidgetDriver对于用户来说是不关心的东西,那么我们就将其进行隐藏。 方案1: 将WidgetDriver放到Widget.cpp中,这样的隐藏方式是最严密的,对于用户来说完全看不到WidgetDriver。但是随着我们的实现膨胀,这会让我们的Widget.cpp变得非常臃...
2011-04-07 20:55:00
68
转载 一步一步实现自己的模拟控件(4)——根控件
窗口、控件驱动、根控件之间的关系 前面我们已经说了,一个窗口只能关联一个控件驱动,一个控件驱动也同样对应一个根控件。为什么呢?因为我们的驱动需要作用于一个控件体系,一个控件体系具有一个根控件,这个根控件管理了整个窗口的客户区。这样我们才能在这个根控件下创建任意的控件,并活动在窗口客户区。 生命周期控制 基于上面的关系,控件驱动和根控件的生命息息相关,那么我们让其相互制约。既然是...
2011-04-06 21:21:00
91
转载 序列化
为何需要序列化 我们常常需要将对象持久化或者在通信中传递对象,这时我们就会使用到序列化。 C++中的序列化 对于C++这样的静态语言来说,序列化往往都很不方便,它对于类型转换非常敏感和严格,所以说想要对C++对象进行序列化那必须对每个序列化的对象进行针对性编码。 C++中的反序列化 因为C++类型是在编译时决定的,而序列化是运行时行为,反序列化需要生成的对象类型必须在编译时决定...
2011-04-04 19:58:00
81
转载 一步一步实现自己的模拟控件(3)——Widget驱动
前面我们利用现有的微软ATL实现的thunk已经为我们截获窗口消息做好了准备,此刻我们应该编写我们的Widget驱动的初步实现了。 利用thunk对窗口消息过程进行子类化,那么窗口消息就会先流入到我们的Widget驱动对象,Widget驱动对象负责将消息传递给消息过滤器。现在我们的消息过滤器还未实现,于是我们打印了进入消息过滤器的消息ID值以观察消息的流动情况。 以下是我们的Widg...
2011-04-03 13:56:00
71
转载 一步一步实现自己的模拟控件(2)——窗口过程thunk
实现Window Proc Thunk: 就好像水泵一样,我们的系统也需要一个泵——消息泵,也就是前面图上的Message Driver。这个Driver的可以依靠一个Window Proc Thunk来截获窗口消息,那么我们得先实现一个Window Proc Thunk。 这里我选择的方法是拿现成的代码来用,微软ATL框架中提供有thunk的实现,我将其提取出来稍加修改就能为我们所...
2011-04-03 13:55:00
105
转载 一步一步实现自己的模拟控件(1)——消息驱动设计
目标: 实现一套windows下简单且可扩展的抽象模拟控件内核。 抽象模拟控件: 我们将windows系统的窗口客户区作为模拟控件的容器,每个模拟控件就是其中的一个抽象矩形区域,并且能够模拟控件进行递归嵌套。控件支持基本的鼠标和键盘消息,能够在窗口大小改变时进行布局。 分析: 因为我们要实现的是抽象的模拟控件,不是真正的窗口控件,那么就需要将窗口消息适时派发到相应控件。下面以一...
2011-04-03 13:53:00
142
转载 ATL COM初探(1)
我没有看过任何的COM书籍,以下总结均是我个人在ATL框架下的实验所得,如有错误望指正。目前的实验都是单进程中的,至于跨进程的实验还未进行。 Apartment: 这是一个抽象的概念,我简单的将其理解为作用域(COM对象的生存空间)。可以分为Single-Threaded Apartment(STA)和Multi-Threaded Apartment(MTA),至于Neutral A...
2011-03-11 11:12:00
88
转载 习惯
床头时刻准备着纸和笔,以便随时捕捉在梦中的灵感,往往这种灵感稍纵即逝,并且在清醒时几乎不可重现。 早上工作解决最棘手的问题,这段时间思维最清晰,效率最高。 下午工作重在发现和记录问题,待明日早上解决。 晚上休息为主,将每天的状态都维持在较高的水准。 转载于:https://www.cnblogs.com/EvilGhost/archive/2011/03/10/Custo...
2011-03-10 17:00:00
85
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人