前言
miniGUI是一个面向嵌入式系统的轻量级图形用户界面支持系统,其轻量小巧,占用资源少是主要优势。但由于没有更新,目前使用的仍是08年发布的版本,随着用户对操作界面的美观度及视觉效果的要求越来越高,设计的很多界面效果无法实现,因此在开发很多需求的过程中,需要先开发底层控件,扩展现有功能,使开发过程变得较为复杂。学习使用miniGUI有一年多的时间,现对部分内容做下总结。
miniGUI初始化
整个miniGUI的初始化会调用InitGUI()函数,流程图如下
在miniGUI初始化过程中,系统线程创建函数SystemThreads会创建以下线程用于窗口管理
SystemThreads | 线程运行函数 | 说明 |
---|---|---|
__mg_desktop | DesktopMain | 桌面事件处理 |
__mg_parsor | EventLoop | 内核事件上报 |
__mg_timer | TimerEntry | 定时器 |
__mg_panel | KeyLoop | 按键处理 |
__mg_refresh | RefreshLoop | 刷新菜单显示 |
主窗口初始化
InitGUI()函数初始化完成后会调用CreateMainWindow 函数来创建一个主窗口,其参数是一个指向 MAINWINCREATE 结构的指针,返回值为所创建主窗口的句柄。
int MiniGUIMain (int argc, const char* argv[])
{
MSG Msg;
HWND hMainWnd;
MAINWINCREATE CreateInfo;
#ifdef _MGRM_PROCESSES
JoinLayer(NAME_DEF_LAYER , "helloworld" , 0 , 0);
#endif
CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;
CreateInfo.dwExStyle = WS_EX_NONE;
CreateInfo.spCaption = "HelloWorld";
CreateInfo.hMenu = 0;
CreateInfo.hCursor = GetSystemCursor(0);
CreateInfo.hIcon = 0;
CreateInfo.MainWindowProc = HelloWinProc;
CreateInfo.lx = 0;
CreateInfo.ty = 0;
CreateInfo.rx = 240;
CreateInfo.by = 180;
CreateInfo.iBkColor = COLOR_lightwhite;
CreateInfo.dwAddData = 0;
CreateInfo.hHosting = HWND_DESKTOP;
hMainWnd = CreateMainWindow (&CreateInfo);
if (hMainWnd == HWND_INVALID)
return -1;
ShowWindow(hMainWnd, SW_SHOWNORMAL);
while (GetMessage(&Msg, hMainWnd)) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
MainWindowThreadCleanup (hMainWnd);
return 0;
}
HelloWinProc为窗口过程函数,处理窗口消息,包括子窗口的创建销毁等。主窗口创建完成后,会一直循环处理事件,直到窗口销毁。当事件发生后,miniGUI 将事件转换为一个消息,并将消息放入消息队列之中,程序循环从消息队列中取出消息,进行处理。
版权声明:本文为secretii原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。