-
Notifications
You must be signed in to change notification settings - Fork 281
第十八篇:在SOUI中实现PreTranslateMessage
huangjianxiong edited this page Nov 20, 2018
·
1 revision
原文链接:《第十八篇:在SOUI中实现PreTranslateMessage》
在MFC中,通常可以通过重载CWnd::PreTranslateMessage这样一个虚函数来实现对一些窗口消息的预处理。多用于tooltip的显示控制。
在SOUI中也实现了类似的机制。
要在SOUI中实现PreTranslateMessage,我们首先需要实现一个接口:
struct IMessageFilter
{
virtual BOOL PreTranslateMessage(MSG* pMsg) = 0;
};
可以看出,实现这个接口和在MFC中重载PreTranslateMessage是相同的道理。
和MFC中只需要重载这个接口不同,在SOUI中,除了需要实现IMessageFilter外,还需要向当前的MessageLoop注册该IMessageFilter。
class SOUI_EXP SMessageLoop
{
public:
SArray<IMessageFilter*> m_aMsgFilter;
// Message filter operations
BOOL AddMessageFilter(IMessageFilter* pMessageFilter);
BOOL RemoveMessageFilter(IMessageFilter* pMessageFilter);
//...
};
上面是SMessageLoop两个和IMessageFilter相关的方法。
SMessageLoop::AddMessageFilter向当前的message loop注册一个IMessageFilter; SMessageLoop::RemoveMessageFilter则向当前的message loop注销一个IMessageFilter
剩下的问题就是如何获得当前的MessageLoop了。
在SHostWnd 或者SHostDialog中可以调用SHostWnd::GetMsgLoop()方法获得。
在SWindow中,则可以调用SWindow::GetContainer()->GetMsgLoop()获得。
使用示例可以参考SDropDownWnd的实现。
class SOUI_EXP SDropDownWnd : public SHostWnd, public IMessageFilter
{
//...
};
UI? just so so!
- 第一篇:SOUI是什么?
- 第二篇:SOUI源码的获取及编译
- 第三篇:用SOUI能做什么?
- 第四篇:SOUI资源文件组织
- 第五篇:在SOUI中使用XML布局属性指引
- 第六篇:在SOUI中用九宫格拉伸方式显示一个图片资源
- 第七篇:创建一个SOUI的Hello World
- 第八篇:SOUI中控件事件的响应
- 第九篇:在SOUI中使用多语言翻译
- 第十篇:扩展SOUI的控件及绘图对象
- 第十一篇:SOUI系统资源管理
- 第十二篇:SOUI的utilities模块为什么要用DLL编译?
- 第十三篇:在SOUI中使用有窗口句柄的子窗口
- 第十四篇:在SOUI中使用定时器
- 第十五篇:在SOUI中消息通讯
- 第十六篇:SWindow的布局属性pos2type及offset
- 第十七篇:使用窗口的cache属性加速SOUI的渲染
- 第十八篇:在SOUI中实现PreTranslateMessage
- 第十九篇:提高SOUI应用程序渲染性能的三种武器
- 第二十篇:在SOUI中使用分层窗口
- 第二十一篇:SOUI中的控件注册机制
- 第二十二篇:在SOUI中使用代码向窗口中插入子窗口
- 第二十三篇:在SOUI中使用LUA脚本开发界面
- 第二十四篇:导出SOUI对象到LUA脚本
- 第二十五篇:在SOUI中做事件分发处理
- 第二十六篇:两个SOUI新控件 ---- SListView和SComboView
- 第二十七篇:SOUI中控件属性查询方法
- 第二十八篇:SOUI中自定义控件开发过程
- 第二十九篇:使用SOUI的SMCListView控件
- 第三十篇:SOUI模块结构图及SOUI框架图
- 第三十一篇:SOUI布局之相对于特定兄弟窗口
- 第三十二篇:在SOUI2.0中像android一样使用资源
- 第三十三篇:使用uiresImporter生成uires.idx及skin.xml
- 第三十四篇:在SOUI中使用异步通知
﹊﹊﹊﹊﹊﹊﹊﹊﹊﹊
This wiki is created by [SOUI Team]