MiniGUI原理分析

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()

 

 

 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随着数字信息技术和网络技术的发展,嵌入式产品已经广泛地进入社会生活 的方方面面。Linux操作系统有诸多优点,将Linux操作系统进行嵌入式改造,应 用于嵌入式产品的开发,是当前技术热点之一。作为信息家电代表的多媒体机顶 盒,功能复杂,技术先进。将嵌入式Linux应用于多媒体机顶盒,能够降低成本, 简化开发流程,提高系统性能,是未来多媒体机顶盒发展趋势。 本文详细论述了本人在硕士论文期间对嵌入式Linux和机顶盒领域所做的研 究和实践,提出了基于嵌入式Linux的多媒体机顶盒方案。本文首先对嵌入式系 统和Linux的发展历史做了简要的回顾,接着深入分析了Linux内核源代码,对典 型嵌入式Linux一一uClniux操作系统进行了研究,包括uClniux的发展历史,内 核技术,移植方案,应用程序的开发等。实时性改造是嵌入式Lniux的关注对象 之一,文中分别讨论了Linux实时性改造的两种主要的方法一一1更TLinux和RTAI, 深入研究了它们的内核结构,实现机制原理,安装步骤,编程方法等,并对RTLinux 的实时性进行了测试。接着对机顶盒做了综合分析,包括其功能,种类,机顶盒 的关键技术等。文章提出了基于嵌入式Linux操作系统的多媒体机顶盒方案,其 硬件平台以韩国三星公司出品的53C2800CPU和5sH2010MPEG一2解码器芯片组 为核心,在其基础上构建了嵌入式Linux操作系统,形成多媒体机顶盒软件系统, 并介绍了一些典型应用程序的实现,如MiniGUI、EPG、股市证券软件等。最后文 章对机顶盒的发展趋势做了分析

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值