摘要: 默认情况下,窗口是不响应 WM_MOUSELEAVE 和 WM_MOUSEHOVER 消息的,所以要使用 _TrackMouseEvent 函数来激活这两个消息。调用这个函数后,当鼠标在指定窗口上停留超过一定时间或离开窗口后,该函数会 Post 这两个消息到指定窗口。使用方法:1. 在对话框类中定义一个变量来标识是否追踪当前鼠标状态,之所以要这样定义是要避免鼠标已经在窗体之上时,一移动鼠标就不断重复产生 WM_MOUSEHOVER 。 BOOL _bMouseTrack=TRUE ;2. 在 OnMouseMove 中调用 _TrackMouseEvent 函数 if (_bMouseTrac 阅读全文
posted @ 2013-03-11 16:08 归海一刀 阅读(279) 评论(0) 推荐(0) 编辑
摘要: WM_CLOSE WM_QUIT WM_DESTROY 三者的区别 收藏 一直以来,我都不是很明白这三个的区别,今天看了一写文章,才明白过来,一下是转载的文字:有三个消息看起来差不多,都是处理关闭的事情的。它们是WM_DESTROY,WM_CLOSE,和WM_QUIT。它们的确很相似,但你需要知道它们之间的不同!一个窗口或者应用程序应该被关闭时发出WM_CLOSE消息,当接收到WM_CLOSE消息时,如果你愿意,向用户提出是否真的退出。你知道让用户作确认或有错误出现或有什么应该注意的事情发生的时候,往往弹出一个消息框。插播消息框int MessageBox(HWND hWnd, // hand 阅读全文
posted @ 2013-03-11 16:04 归海一刀 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 一、COM组件的目标:COM组件的一个主要优势是:便于升级。要实现这个优势需要满足一下两个条件:1、运行时从客户程序动态加载和卸载,采用DLL技术可以实现。2、为了更好的突出DLL的优势,还需要信息隐藏,即封装性。二、COM组件的信息隐藏采用IUnknown接口来实现: 1、IUnknown接口功能简介:IUnknown意思是未知,即未知的接口。采用这个名字是为了简单起见,所有的COM接口都需要继承IUnknown,因此若某个客户拥有一个IUnknown接口的指针,也就不知道接口到底是什么类型的,只需要知道此接口可以用来查询其他接口。IUnknown接口有一个用来查询接口的函数QueryInt 阅读全文
posted @ 2013-03-11 15:55 归海一刀 阅读(1818) 评论(0) 推荐(0) 编辑
摘要: 【基本知识】1、#pragma section,建立一个section。下例中,ATL是section名,_a是section中的的段名,段默认大小为104H,另外默认段内数据初始化为0。意即一个section可以包含多个名字不同的段。不懂section的请查阅PE文件结构。2、合并两个Section3、allocate将指定的变量放在指定的section中的指定的段中。4、VC编译器属性,假设定义了同一section的三个段,ATL$_a、ATL$_b、ATL$_c,则这三个段在section内会按名称顺序依次排列。【ATL OBJ_MAP 的建立】根据【基本知识】,很容易分析出,上文定义了 阅读全文
posted @ 2013-03-11 11:44 归海一刀 阅读(299) 评论(0) 推荐(0) 编辑