随笔分类 -  Delphi-消息研究

摘要:在主线程定要禁止使用waitforsingleobject(),原因是会阻塞主线程的消息循环,所以必须使用另一种 MsgWaitForMultipleObjects,即可以让消息通过,下面就是一个基于MsgWaitForMultipleObjects与Event,实现多线程同步这样。 HANDLE 阅读全文
posted @ 2018-06-06 21:20 findumars 阅读(3136) 评论(0) 推荐(0) 编辑
摘要:永远记住,无论你是用 SDK 还是借用 VCL 来创建窗口,都要遵循 Windows 的游戏规则,即先注册窗口类,然后再创建窗口实例,在消息循环中写实现代码。你还要知道 Windows 已经为了我们预注册了多个窗口类,例如“Edit”、“ComboBox”,这时候我们要做的就是直接创建这些窗口,无需 阅读全文
posted @ 2017-06-15 21:22 findumars 阅读(1055) 评论(0) 推荐(0) 编辑
摘要:// 现象描述:// 用户点击按钮后程序开始繁忙工作,这时候用户不知道是否成功,就继续点几次// 采用Enalbe = false ... = true的方式发现还会触发点击,分析原因如下// 当程序繁忙的时候消息被堵住了// 所以点击消息还会被处理// 将队列里的消息处理掉后才打开按钮的Enabl 阅读全文
posted @ 2017-01-24 22:28 findumars 阅读(389) 评论(0) 推荐(0) 编辑
摘要:API有隐藏的MessageBoxTimeOut函数可以做计时对话框,缺点是不能显示还剩下多少秒关闭。 const IDTIMEDOUT = 32000; function MessageBoxTimeOut(hWnd: HWND; lpText: PChar; lpCaption: PChar;  阅读全文
posted @ 2017-01-24 21:49 findumars 阅读(1489) 评论(0) 推荐(0) 编辑
摘要:[cpp] view plain copy [cpp] view plain copy http://blog.csdn.net/zwfgdlc/article/details/49591315 阅读全文
posted @ 2017-01-23 21:56 findumars 阅读(856) 评论(0) 推荐(0) 编辑
摘要:在delphi中,有时候我们希望对象可以接收windows消息,怎么办呢?因为要接收windows消息起码要有windows Handle,难道要建立的一个可见窗口?那样似乎太差强人意了。delphi提供了一个函数Classes.AllocateHWnd。分析AllocateHWND发现delphi 阅读全文
posted @ 2017-01-20 23:01 findumars 阅读(971) 评论(0) 推荐(0) 编辑
摘要:Windows Client 客户端在关机,不外乎两种情况: 1. 没有处理 Windows 关机消息; 2.处理了关机消息,但是超时了; 上面这两种情况,都会让Windows 关不了机。在现实生活中,这个情况的出现,让用户很头疼! 一般出现上面这种情况,要对代码的分析,一定要对消息分发,消息处理的 阅读全文
posted @ 2017-01-20 00:10 findumars 阅读(615) 评论(0) 推荐(0) 编辑
摘要:自己做了一个pagecontrol控件,点击page页可以切换,运行时没有问题,但在设计时控件放到窗体后好像不响应mouse事件,导致设计期不能切换page页,有知道的朋友还请不吝赐教,谢谢。 CM_DESIGNHITTEST 参数:TCMDesignHitTest 传回值:0或1 在设计时期当鼠标 阅读全文
posted @ 2016-10-19 16:41 findumars 阅读(249) 评论(0) 推荐(0) 编辑
摘要:这段时间用VC封装Windows类库,没有MakeObjectInstance处理窗口消息确实不爽,又不想使用MFC的消息映射,这玩意的效率和美观只能呵呵。 至于MakeObjectInstance是什么,Delphi转过来的同学必然很了解这个方便的功能,就是动态构造一个函数把普通函数转到一个类的成 阅读全文
posted @ 2016-09-02 15:28 findumars 阅读(476) 评论(0) 推荐(0) 编辑
摘要:揭开.NET消息循环的神秘面纱(-) http://hi.baidu.com/sakiwer/item/f17dc33274a04df2a9842866 曾经在Win32平台下奋战的程序员们想必记得,为了弄清楚“消息循环”的概念,度过多少不眠之夜。尽管如今在应用程序代码的编写过程中,我们已经不再需要 阅读全文
posted @ 2016-08-26 18:22 findumars 阅读(1501) 评论(0) 推荐(0) 编辑
摘要:思考一个最简单的程序行为:我们的Dialog上有一个Button, 当用户用鼠标点击这个Button时, 我们弹出一个MessageBox。 这个看似简单的行为, 谁能说清楚它是如何运行起来的,背后究竟发生了什么? 下面是我个人尝试的解答: (1)我们的鼠标点击事件到达设备的驱动程序, 驱动程序把消 阅读全文
posted @ 2016-08-19 00:36 findumars 阅读(775) 评论(0) 推荐(0) 编辑
摘要:MakeObjectInstance应该不会帮助处理(接收)消息回调函数的返回值,可是有时候又确实需要这个返回值,这可怎么办呢?我是看到这段文字的时候,想到这个问题的: http://note.sdo.com/u/432181446/NoteContent/pMF36~jDXzSFnM1rg001s 阅读全文
posted @ 2016-04-06 21:33 findumars 阅读(1018) 评论(0) 推荐(0) 编辑
摘要:前提:WM_NCHITTEST是很重要的,只要鼠标在活动,Windows无时无刻在发这个消息进行探测。 虽然WndProc具有优先权,但是却刻意调用了inherited WndProc(Message);,因此会首先执行TWinControl.WMNCHitTest,如果发现是透明并且能找到一个TC 阅读全文
posted @ 2016-03-31 16:32 findumars 阅读(1427) 评论(0) 推荐(0) 编辑
摘要:VCL里源码如下: 阅读全文
posted @ 2016-03-24 17:44 findumars 阅读(1718) 评论(0) 推荐(0) 编辑
摘要:WM_CLOSE:关闭应用程序窗口 还有: DestroyWindow函数来自这里(TApplication.Destroy里也调用了这个函数): 那难道每个TButton,每个TPanel,都会收到WM_DESTROY消息吗? 阅读全文
posted @ 2016-03-24 17:35 findumars 阅读(2431) 评论(0) 推荐(0) 编辑
摘要:1,回调函数工作机制 回调函数由操作系统自动调用,回调函数的返回值当然也是返回给操作系统了。 2,截获操作系统发出的消息,截获到后,将另外一个消息返回给操作系统,已达到欺骗操作系统的目的。 下面还是以具体例子来说明比较好。 在 Windows下,每一个鼠标消息都是由 WM_NCHITTEST 消息产 阅读全文
posted @ 2016-03-23 19:47 findumars 阅读(1855) 评论(0) 推荐(0) 编辑
摘要:其实很简单: 转自http://www.delphi3000.com/articles/article_1050.asp?SK= 稍微分析一下,inherited WndProc(Message)会导致执行: 即告诉父控件,有鼠标移入了。但是TWinControl没有CM_MOUSEENTER消息函 阅读全文
posted @ 2016-03-23 05:42 findumars 阅读(1095) 评论(0) 推荐(0) 编辑
摘要:我为了移动一个无标题栏的窗体,使用了WM_NCHITTEST消息,这个消息大概如下: 通常,我们拖动对话框窗口的标题栏来移动窗口,但有时候,我们想通过鼠标在客户区上拖动来移动窗口。 一个容易想到的方案是,处理鼠标消息WM_LBUTTONDOWN和WM_LBUTTONUP。在OnLButtonUp函数 阅读全文
posted @ 2016-03-22 04:20 findumars 阅读(7153) 评论(0) 推荐(0) 编辑
摘要:代码如下: 虽然函数本身有返回值,但是一般情况下,不使用函数的返回值,而是把返回值记录在消息结构体里面,举例: 但是也有一些情况直接使用Perform函数的返回值,在Controls.pas单元里所有直接使用函数返回值的情况都摘录在这里了: 这还不算,还得看看那些记录在消息结构体里的返回值是被如何使 阅读全文
posted @ 2016-03-22 03:33 findumars 阅读(702) 评论(0) 推荐(0) 编辑
摘要:许多的面向对象程序设计语言都支持对消息的处理。消息处理是一种动态响应客户类发出的请求,它与过程调用不同。过程调用中,客户类必须知道服务类提供了哪些过程,以及每个过程的调用约定,并且在调用时需要明确指出要调用服务类中的哪个过程,相当于静态地将客户类与服务类进行了某种调用关系的绑定,这将导致客户类与服务 阅读全文
posted @ 2016-03-15 21:40 findumars 阅读(269) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示