易语言界面库的实现(二)消息预处理 和窗口生存周期。
2008-12-28 16:41
169 查看
在窗口过程里面能处理所有的消息? 答案是 NO!
isdialogmessage 和 TranslateMessage 干啥吃的? 它把原始消息都给弄了一下。我拿不到原汁原味的东西。
如果说封装库。会有这个损失。那肯定是最大的损失!要让你的窗口类能够有机会处理最原始的消息。那必须在消息分发之前。也就是说 GetMessage 之后就直接处理。这才叫原汁原味。当然,对于非队列消息。也就只能能在窗口过程里处理。这完全足够了。
到现在为止。易语言的类里面有了两个最基本的虚方法。"消息过程" 和 “消息预处理”。这两个方法都是被系统调用。你要处理自己的。你要自己处理这些事? 继承覆盖。就可以了。
关于事件表。
每个类都有自己的 事件表。用哈希+链表来管理,虽然内存大了点。但速度整体还行。特别是写大型界面的时候。不会损失太多消息映射效率。
关于窗口生存周期、
又一次用到了以语言的虚方法和汇编了。在窗口过程的 WM_NCDESTROY 事件里面。调用对象的 “清理对象” 方法。这样在窗口关闭的时候。对象能有机会回收资源。 你继承的窗口类也是如此。覆盖这个方法。自己在里面回收就是了。要注意的是。你必须在你的类里面显式调用基类的同名方法。否则基类的资源会无法回收。
isdialogmessage 和 TranslateMessage 干啥吃的? 它把原始消息都给弄了一下。我拿不到原汁原味的东西。
如果说封装库。会有这个损失。那肯定是最大的损失!要让你的窗口类能够有机会处理最原始的消息。那必须在消息分发之前。也就是说 GetMessage 之后就直接处理。这才叫原汁原味。当然,对于非队列消息。也就只能能在窗口过程里处理。这完全足够了。
到现在为止。易语言的类里面有了两个最基本的虚方法。"消息过程" 和 “消息预处理”。这两个方法都是被系统调用。你要处理自己的。你要自己处理这些事? 继承覆盖。就可以了。
关于事件表。
每个类都有自己的 事件表。用哈希+链表来管理,虽然内存大了点。但速度整体还行。特别是写大型界面的时候。不会损失太多消息映射效率。
关于窗口生存周期、
又一次用到了以语言的虚方法和汇编了。在窗口过程的 WM_NCDESTROY 事件里面。调用对象的 “清理对象” 方法。这样在窗口关闭的时候。对象能有机会回收资源。 你继承的窗口类也是如此。覆盖这个方法。自己在里面回收就是了。要注意的是。你必须在你的类里面显式调用基类的同名方法。否则基类的资源会无法回收。
相关文章推荐
- C#+JS简单实现 定时轮询数据表 以及时弹出消息提示窗口(转)
- .net remoting 实现通用消息处理窗口
- C#实现相似QQ的隐藏浮动窗口、消息闪动
- C#+JS简单实现 定时轮询数据表 以及时弹出消息提示窗口
- winforms实现类似QQ消息框一样的右下角消息提示窗口
- Delphi实现窗口一直在桌面工作区内显示(重写WM_WINDOWPOSCHANGING消息)
- 用xmlhttp和Java session监听改善站内消息系统,实现站内消息弹出窗口
- Windows编程 从消息窗口到基本窗口 游戏循环窗口框架的简单实现
- 自定义的窗口消息实现
- VC 某窗口向其他窗口发送消息实现步骤
- delphi代码实现窗口最小化,最大化,关闭消息发送
- MFC实现类似qq的在屏幕右下角动画显示消息窗口 .
- VC++实现在系统托盘来新消息闪烁,鼠标悬停显示窗口
- 利用主线程与子线程间的消息通讯,实现任务处理队列.子线程中创建不会阻塞执行的窗口
- 利用PostMessage触发其他窗口类自定义消息响应函数实现主窗口和子窗口数据交互
- RichEdit控件与父窗口使用消息反射机制实现过滤输入字符(WIN32应用)
- winforms实现类似QQ消息框一样的右下角消息提示窗口
- C#实现仿QQ消息窗口
- 网络编程(53)—— Windows下使用WSAAsyncSelect实现窗口处理socket消息
- 利用C#实现标注式消息提示窗口