上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 14 下一页
摘要: 在多线程程序中使用COM对象真是件令人头疼的事情。当你能够访问一个接口指针的时候,并不意味着你可以调用接口上的方法。我从来没真正搞懂过所谓COM的几种线程模式。问题是,当我试图在一个线程里调用一个COM接口的方法,而这个COM接口是在另一个线程中创建时,从来没有成功过。更糟的是,连错误提示都没有。 用全局接口表实现COM接口在不同线程中的传递 在多个线程中传递接口需要额外的工作,各种书籍上都介绍了所谓Marshal一个接口方法,不过我从来没有使用过。因为有更简单的方法,就是用全局接口表(GlobalInterfaceTable)。 GlobalInterfaceTable允许你在任何地方... 阅读全文
posted @ 2013-05-09 17:34 归海一刀 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 最开始重新导入项目时,遇到过 "fatal error C1083"这个错误,当时经同事指点,改了加载头文件的附加路径,问题很容易就解决。今天将整个工程改的编译方式改为Release方式,再次遇到"fatal error C1083",决心将具体的解决方法以图文的方式记录下来,一方面加深自己的印象,另一方面,也方便遇到类似问题的同学找到快速解决方案。步骤1:定位报“fatal error C1083: ”错误的文件,找到它所在的目录。步骤2:添加该项目的附加路径 。如图所示:1)右键查看该项目的属性2)点击配置属性——〉 C/C++ ——〉 常规 ——〉 阅读全文
posted @ 2013-04-23 09:59 归海一刀 阅读(462) 评论(0) 推荐(0) 编辑
摘要: 当WM_PAINT不是由InvalidateRect产生时,即由最大化,最小化等产生时,或者移动产生(移动有时只会产生WM_ERASEBKGND消息)系统先发送WM_ERASEBKGND消息,再发送WM_PAINT消息. 如果处理WM_ERASEBKGND消息时返回FALSE,BeginPaint标记pt.fErase 为TRUE,如果处理WM_ERASEBKGND时返回TRUE,BeginPaint标记pt.fErase为FALSE. 当WM_PAINT由InvalidateRect产生时,先发送WM_PAINT消息(异步),如果InvalidateRect的bErase为 TRUE,Beg 阅读全文
posted @ 2013-04-17 15:34 归海一刀 阅读(523) 评论(0) 推荐(0) 编辑
摘要: 一直以来,对于WM_PAINT和WM_ERASEBKGND消息不是很清楚,从书上和网上找了很多资料,大体上有以下几点说法:1>WM_PAINT先产生,WM_ERASEBKGND后产生2.WM_PAINT产生后,在调用BeginPaint时hdc = BeginPaint(hWnd, &ps);如果ps.fErase为true,则BeginPaint会产生WM_ERASEBKGND消息3.BeginPaint函数用来擦除窗口背景4.WM_ERASEBKGND用来绘制背景经过调试、分析,发现上面的说法并不正确。以下是一些测试代码,代码后面附上一些分析。最后总结出几点,可以解释程序中出 阅读全文
posted @ 2013-04-17 15:29 归海一刀 阅读(370) 评论(0) 推荐(0) 编辑
摘要: 在网上看到了这篇文章:并经过实验得知:from:http://blog.csdn.net/lyclowlevel/article/details/5481393影响背景刷新的因素有:1、注册窗口类时,是否指定了hbrBackground;2、调用InvalidateRect时,第三个参数的取值。可以分为以下三种情况:1、未指定hbrBackground BeginPaint返回的PAINTSTRUCT的成员fErase为TRUE//这个无论设置与否 都返回true 请高人指点2、指定了hbrBackground且调用InvalidateRect时第三个参数为FALSEBeginPaint返回的 阅读全文
posted @ 2013-04-17 15:03 归海一刀 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 在做一些异形窗口时,往往会响应以下NC消息:WM_NCPAINT, WM_NCACTIVATE, WM_NCLBUTTONDOWN, WM_NCMOUSEMOVE。但是,对于NC区的处理方式会受到系统版本及桌面主题的影响。最明显的一个例子是,在XP和WIN7下,窗口标题栏的高度是不同的。正因为如此,采用响应NC消息进行窗口自绘是极其麻烦。另一种可行的方法是,将窗口的类型设置成无边框的,那么整个窗口区域都是客户区,客户区的绘图操作完全由程序员自己控制,不会受到系统、桌面主题的影响。采用这个方法的缺点在于,失去了标题栏的拖动功能。其实,只要响应WM_NCHITTEST,然后在适当的区域返回HTCA 阅读全文
posted @ 2013-04-17 14:41 归海一刀 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 在窗口与窗口之间毫无重叠的情况下,根本不需要关心z-order。然而,当窗口之间出现重叠时,系统就需要通过一个标准来确定窗口的显示顺序。这个标准就是z-order。存在多个因素影响一个窗口的z-order: 1、窗口类型是否为TOPMOST; 2、窗口间的父子关系; 3、窗口间的owner关系; 4、是否为active状态。 z-order的确定过程如下: 1、所有topmost窗口的zorder都比非topmost窗口高; 2、一个top-level窗口的zorder比它的owner的zorder高; 3、子窗口的zorder与父窗口的zorder一样高。 什么是top-level窗口? . 阅读全文
posted @ 2013-04-17 14:36 归海一刀 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 我是个喜欢瞎琢磨的人。尤其是这几天心情非常郁闷。于是开始琢磨了…….琢磨的问题就是WS_CLIPCHILDREN和WS_CLIPSIBLINGS两种窗口样式的理解。1.求助MSDN我的第一步当然是求助MSDN。在MSDN里面有详细的解释。1.1WS_CLIPCHILDRENWS_CLIPCHILDREN样式从字面上可以理解成ClipChildren,裁减子窗口。MSDN里的E文解释:Excludes the area occupied by child windows when drawing occurs within the parent window. This style is use 阅读全文
posted @ 2013-04-17 14:23 归海一刀 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 什么是对象的句柄?句柄术语一般用来指获取另一个对象的方法——一个广义的假指针。这个术语是(故意的)含糊不清的。含糊不清在实际中的某些情况下是有用的。例如,在早期设计时,你可能不准备用句柄来表示。你可能不确定是否将一个简单的指针或者引用或者指向指针的指针或者指向引用的指针或者整型标识符放在一个数组或者字符串(或其它键)以便能够以哈希表(hash-table)(或其他数据结构)或数据库键或者一些其它的技巧来查询。如果你只知道你会需要一些唯一标识的东西来获取对象,那么这些东西就被称为句柄。因此,如果你的最终目标是要让代码唯一的标识/查询一个Fred类的指定的对象的话,你需要传递一个Fred句柄给这些 阅读全文
posted @ 2013-04-17 10:05 归海一刀 阅读(538) 评论(0) 推荐(0) 编辑
摘要: 编辑器加我在很多书上看到程序要求对消息响应函数进行重栽,还遇到过对对话框的初始化函数重栽,我不太明白,消息响应函数对应一个消息响应,怎么还可以重栽?书上说重栽没说要改变参数。重栽对话框的初始化函数也没说参数要改变,请问是怎么回事? 回答1 :响应的是消息,重载的是响应后的操作。回答2:消息相应函数中调用虚函数,利用虚函数的特性,允许你修改相应行为,casyncsocket中就是典型的这种应用,如果得到一个连接的时候发送一个消息,casyncsocket处理这个消息的是虚函数onconnect(),你重载这个虚函数,那么处理这个消息的动作就变成重载以后的函数。 回答3:不是重载,而是改写 ... 阅读全文
posted @ 2013-04-17 09:51 归海一刀 阅读(158) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 14 下一页