zxlben

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2014年2月23日

摘要: ATL中采用了一种动态生成机器指令的方式进行窗口句柄与窗口对象进行关联,以是详细分析: CWindowImpl会在第一次调用Create时注册窗口类,该窗口类是的信息是在CWindowImpl的子类中使用 DECLARE_WND_CLASS定义的,该宏会为CWindowImpl的子类定义一个静态成员函数GetWndClassInfo, 该函数返回一个CWndClassInfo结构体,其中包含了WNDCLASSEX,用于指定该类的窗口类注册时所用的 WNDCLASSEX结构。 在DECLARE_WND_CLASS指定的默认的窗口过程是StartWindowProc,该函数是CWindowImpl 阅读全文
posted @ 2014-02-23 21:48 zxlben 阅读(737) 评论(0) 推荐(0) 编辑

2013年12月17日

摘要: 1.关于LoadIcon/LoadCursor,这两个函数,第一个参数为实例句柄,如果是从保存在磁盘中的可执行文件中加载资源,则需要则需要指定可执行文件的hInstance,如果是系统资源,该句柄为NULL。2.关于窗口的Style,有的在窗口类中指定,有的在CreateWindow时指定,是因为有些参数是每个实例都不同的,因此需要在Create时指定。3.进入消息循环前的UpdateWindow是给消息队列增加第一条WM_PAINT.4.队列消息:按键消息(WM_KEYDOWN,WM_KEYUP,WM_CHAR),鼠标消息(WM_MOUSEMOVE,WM_LBUTTONDOWN等),WM_T 阅读全文
posted @ 2013-12-17 15:00 zxlben 阅读(188) 评论(0) 推荐(0) 编辑

摘要: 1.ASCII,7位编码,共128个编码,1950年ansi提出。2.变种的Ascii,0x40等10个代码保留各个国家单独使用,1967年由iso提出。旨在解决重音符号,英镑符号的问题。3.扩展ASCII,增加到8位。有包括ibm的扩展字符集和windows支持的ansi字符集(ISO 8859-1)扩展ascii引入代码页的概念,IBM字符集为437代码页或者msdos latin us,850代码页是msdos latin 1,类似ansi字符集,但是不同。所有代码页较低的128个字符都是ascii,高的128个代码由代码页定义。别的代码页用于其他语言。4.DBCS/MBCS(双字节字符 阅读全文
posted @ 2013-12-17 11:52 zxlben 阅读(112) 评论(0) 推荐(0) 编辑

摘要: 1.从程序员角度看,统一的界面意味着编程人员可以使用windows自带的例程来构建许多的功能,例如菜单,对话框等。只用几行代码就可以实现很多复杂的功能。但是这同时也增加了一些限制,使得做出一个个性化的ui会更加的困难。2.windows是基于动态链接的,有三个基本的模块:user,gdi,kernel 阅读全文
posted @ 2013-12-17 11:11 zxlben 阅读(109) 评论(0) 推荐(0) 编辑

摘要: 最近打算重新读windows程序设计这本书,这是我第二次读这本书,上一次读已经是七八年前的事情了。当初读的时候,刚刚接触windows开发不久,很多东西都不能够完全理解。这几天重新读了几章,发现收获不少,打算把这些收获写下来,方便自己查阅,同时也可以与大家分享交流。由于水平实在有限,难免有说的不正确的地方,欢迎大家拍砖指正,我将感激不尽,在此先谢过! 阅读全文
posted @ 2013-12-17 10:56 zxlben 阅读(179) 评论(0) 推荐(0) 编辑

2013年12月7日

摘要: GRUB的加载流程GRUB是GNU的一款多重引导软件。GRUB包含了3个重要的文件:stage1 ,e2fsstage1_5,stage2。这三个文件分别代表了GRUB运行的3个阶段。1.stage1stage1实际存在于MBR的bootloader段中,由BIOS加载执行,stage1会加载stage1.5(例如e2fsstate1_5表示ext2文件系统的stage1.5)。stage1.5用于让GRUB可以识别对应的文件系统。问题是在stage1没有加载stage1.5前不能识别文件系统,那么stage1如何找到stage1.5的呢?2.stage1.5stage1.5实际上存在于MBR 阅读全文
posted @ 2013-12-07 11:18 zxlben 阅读(317) 评论(0) 推荐(0) 编辑

2013年12月6日

摘要: Boot:1.系统PowerOn2.BIOS在完成硬件初始化以及POST3.BIOS加载MBR4.GRUB->GRUB or kernalMBRMBR即主引导记录,是在BIOS中选择的启动设备的0扇区。MBR包括3个部分,一共512BYTE:(1)Magic Number 2BYTE(2)Partition Table 64BYTE(3)BootLoader 446BYTEBootLoaderGRUB是BootLoader的一种,可以存在于MBR中,有2个功能:1.加载扇区 每个分区的第一个扇区可以作为引导扇区,MBR中的GRUB可以加载别的引导扇区中的BootLoader(比如另一个G 阅读全文
posted @ 2013-12-06 17:34 zxlben 阅读(309) 评论(0) 推荐(0) 编辑

2013年11月22日

摘要: 首先定义一个类Xclass X{public: X(); X(const X& x); virtual ~X(); virtual foo(); }再来一段代码:X foobar(){ X xx; X *px = new X; //foo 是一个虚函数 xx.foo(); px->foo(); delete px; return xx;};以上这个函数中包括了虚函数调用,构造,NRV优化,虚析构等部分。以下代码展示了用C代码描述样子://为了避免多次复制,直接将接收返回值的对象作为引用参数传入void foobar(X &_result){ //X xx... 阅读全文
posted @ 2013-11-22 15:12 zxlben 阅读(122) 评论(0) 推荐(0) 编辑

摘要: object Lessons1.C++中布局以及存取时间上的的额外负担是由virtual引起的:virtual function、virtual base class。或是由于多继承引起的。2.C++中有2种class membe:static,non-staticr和三种member function:static,non-static,virtual。不同的对象模型在内存中对这些元素有不同的表现方式。 a.简单对象模型 以solt方式保存对象成员。 b.表格驱动对象模型 每个对象都是2个指针大小,一个指向data member table,一个指向member function tab.. 阅读全文
posted @ 2013-11-22 12:24 zxlben 阅读(158) 评论(0) 推荐(0) 编辑

2013年11月21日

摘要: 前言 - 什么是C++对象模型C++对象模型包括2个方面的含义:1.语言中直接支持面向对象程序设计的部分2.对于各种(面向对象)支持的底层实现机制。 无论是什么语言,都需要转换为汇编。很多面向对象特性不是汇编所原生支持的,这也许是C和C++区别最大的地方吧。 在C中大部分语言层面的机制都可以得到汇编的支持,例如函数调用,循环,条件转移,指针等等... 在C++中,很多特性不被汇编语言所支持,例如继承,虚函数,运算符重载,构造函数等。所以需要提供一种实现机制, 将这些特性转换为实实在在的汇编代码。关于"不变量"在C++对象模型的实现过程中,是需要有一些不变量存在的。有一些东西 阅读全文
posted @ 2013-11-21 16:34 zxlben 阅读(114) 评论(0) 推荐(0) 编辑