MiniGUI原理分析
来源:互联网 发布:工业设计用什么软件 编辑:程序博客网 时间:2024/05/17 17:40
MiniGUI原理分析
一. 概述
MiniGUI是广泛应用于嵌入式系统的GUI中间件,支持linux。有线程版本或者进程版本,线程版本为支持nucleus或者threadx,当然也支持linux;同时linux还支持进程版本。本文只是分析基于linux的线程版本。
二. 基本结构
如图所示,系统由不同的线程协作完成。系统在启动的过程中会通过函数SystemThreads(),启动两个线程DesktopMain(),EventLoop()。
EventLoop()中,通过linux系统调用select()监控底层驱动的输入,原始MiniGUI版本有键盘和鼠标,当有外设变化时,会生成消息的形式,然后发往线程DesktopMain,由函数DesktopWinProc()处理,DesktopMain线程相当于服务器线程,它一方面完成系统任务的处理,另一方面将部分消息转发到窗口线程,由窗口线程完成部分任务。
2.1 DesktopMain函数分析
DesktopMain的主循环函数是DesktopWinProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam),它具体的执行过程如下所示:
2.2 WindowMessageHandler()函数分析
2.3 线程窗口
以开源的例子为例来说明线程窗口的执行,参考dlgdemo.c
2.4 系统的启动过程
系统的启动过程参考如下的宏定义:
#define MiniGUIMain \
MiniGUIAppMain (int args, const char* argv[]); \
int main_entry (int args, const char* argv[]) \
{ \
int iRet = 0; \
if (InitGUI(args, argv) != 0) { \
return 1; \
} \
iRet = MiniGUIAppMain (args, argv); \
TerminateGUI (iRet); \
return iRet; \
} \
int MiniGUIAppMain
以下具体的分析一下InitGUI()的启动流程
InitGUI():
/*initialize default window process*/
__mg_def_proc[0] = PreDefMainWinProc;
__mg_def_proc[1] = PreDefDialogProc;
__mg_def_proc[2] = PreDefControlProc;
mg_InitFixStr()
mg_InitMisc ()
mg_InitGAL ()//here to get width an height
mg_InitSystemRes ()
mg_InitGDI()
mg_InitScreenDC (__gal_screen)
license_create();
splash_draw_framework();
mg_InitCursor()
mg_InitLWEvent()
mg_InitLFManager ()
mg_InitMenu ()
mg_InitControlClass()
img_InitAccel()
mg_InitDesktop ()
mg_InitFreeQMSGList ()
createThreadInfoKey ()
SystemThreads()// initial eventloop ,run select to get input data
SetKeyboardLayout ("default")
SetCursor (GetSystemCursor (IDC_ARROW))
mg_TerminateMgEtc ()
return 0;
三. 消息机制
消息队列数据结构所处的位置
typedef struct _MAINWIN
{
……
PMSGQUEUE pMessages;
……
}
3.1 取消息队列
PMSGQUEUE kernel_GetMsgQueue (HWND hWnd)
3.2 向消息队列存消息
BOOL kernel_QueueMessage (PMSGQUEUE msg_que, PMSG msg)
分为三种情况:1.鼠标消息
2. 超时,空闲,光标闪烁
3. 其他消息
3.3 消息分类
1. 同步消息 SendSyncMessage()
SendMessage()
2. 异步消息 SendNotifyMessage()
PostMessage()
- MiniGUI原理分析
- MiniGUI原理分析GAL
- MiniGUI原理分析 控件
- minigui 初始化分析
- MiniGUI 定时器分析
- MiniGUI源码分析
- minigui 初始化分析
- minigui代码分析
- MiniGUI源码分析-- 开始篇
- MiniGUI
- MiniGUi
- minigui
- MiniGui
- MiniGUI源码分析——DC分析
- Minigui IAL引擎实现 分析 转
- MiniGUI源代码分析(1)--概述
- MiniGUI源代码分析(2)--源码结构
- MiniGUI源代码分析(3)--control目录
- 第十三项目三:CEmployee类继承自CPerson类
- 图---邻接表的深度搜索与广度搜索测试一
- Add Binary
- 最字头之一:最长公共子序列
- 在switch-case中定义变量时当心被“穿越”
- MiniGUI原理分析
- 代理抓取网页
- POJ 3273 Monthly Expense
- 自我情绪控制的方法(数颜色,运动,音乐,回忆法)
- 三层架构之系统登陆实例
- VC调用大漠的方法
- shell脚本中执行mysql语句
- Java二分查找
- 韩语学习 第一节:元音