国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
MiniGUI源碼走讀
注:這里是針對以下配置的MiniGUI v1.3.3進行解讀:
使用thread模式
資源內(nèi)置(Resource Incore)
使用舊版本GAL
使用native gal引擎
支持RBF字體
不支持鼠標

Author: Hily Jiang
Email&Gtalk: hilyjiang at Gmail
Blog: http://hily.iyi.cn/

0. 主函數(shù)main()
主函數(shù)main()在src/main/main.c中定義,主要運行過程如下:
InitGUI():用于初始化GUI;
MiniGUIMain():進入用戶應用程序主體;
TerminateGUI():用戶應用程序退出后執(zhí)行它釋放資源,最后退出minigui。

1 初始化GUI:InitGUI()
位于src/kernel/init.c中,主要過程:
InitMisc():初始化配置;
InitGAL():初始化圖形抽象層;
InstallSEGVHandler():指定信號處理函數(shù);
InitGDI():初始化圖形設備接口;
InitWindowElementColors():初始化窗體顏色;
InitLWEvent():初始化底層事件;
InitFixStr():初始化固定字符串;
InitMenu():初始化菜單;
InitControlClass():初始化控制類;
InitAccel():初始化加速器;
SystemThreads():開辟系統(tǒng)線程;
SetKeyboardLayout():設置鍵盤布局;
SetCursor():設置鼠標;
SetCursorPos():設置鼠標位置;
TerminateMgEtc():INCORE_RES時該函數(shù)為空。

1.1 初始化配置:InitMisc()
位于src/misc/misc.c中,函數(shù)主體就是調(diào)用這個文件頭文件misc.h中的InitMgEtc()。
InitMgEtc()的作用就是獲取src/sysres/mgetc.c中定義的MiniGUI運行時的配置,并分配一個句柄hMgEtc指向配置對象。
配置信息保存在一個ETC_S類型的結構MGETC中,它在src/sysres/mgetc.c中定義。

1.2 初始化圖形抽象層:InitGAL()
位于src/gal/gal.c中,運行過程如下:
檢查可用的圖形引擎數(shù)NR_GFXES,即該文件中gfxes[]數(shù)組的元素個數(shù),若無可用引擎信息,則返回錯誤;
GetMgEtcValue()從配置中讀取配置的GAL引擎名稱;
接著查找gfxes[]數(shù)組中是否有匹配的引擎,找到后用cur_gfx指向該引擎信息,如果沒有找到,則返回錯誤;
接著用GAL_InitGfx()檢測當前引擎的初始化函數(shù)是否返回成功。

1.2.1 初始化GAL引擎:GAL_InitGfx()
GAL_InitGfx是一個宏定義,位于include/oldgal.h中,它調(diào)用src/gal/native/native.c中對當前引擎的圖像函數(shù)進行初始化。

1.3 指定信號處理函數(shù):InstallSEGVHandler()
位于src/kernel/init.c中,它的作用就是指定一些信號和信號處理函數(shù)。
指定的信號有:SIGSEGV(段錯誤)、SIGTERM(終止信號)和SIGINT(中斷信號)。
指定的信號處理函數(shù)為:segvsig_handler,也在這個文件中定義。
在程序接收到指定的三個信號時,segvsig_handler會釋放資源并退出程序執(zhí)行。

1.4 初始化圖形設備接口:InitGDI()
位于src/gdi/gdi.c中,運行過程如下:
InitTextBitmapBuffer():這個函數(shù)始終返回true,似乎沒什么用了;
InitIncoreRBFonts():初始化內(nèi)嵌的RBF字體;
InitSysFont():初始化系統(tǒng)字體;
InitFreeClipRectList():初始化空閑方形區(qū)域塊列表;
初始化互斥鎖__mg_gdilock(GDI鎖)和dcslot(DCSlot鎖);
dc_InitClipRgnInfo():初始化Device Context(設備環(huán)境)的范圍;
dc_Init_ScreenDC():初始化屏幕的DC。

1.4.1 初始化RBF字體:InitIncoreRBFonts()
位于src/font/rawbitmap.c中,運行過程如下:
可用字體數(shù)為NR_RBFONTS,即該文件中incore_rbfonts[]數(shù)組的元素個數(shù);
檢查當前所有可用的字體的信息是否正確,包括:
字符集:fontGetCharsetFromName();
是否支持該字符集:GetCharsetOps();
字體寬度:fontGetWidthFromName();
字體高度:fontGetHeightFromName()。
接著初始化設備字體信息,包括字體信息,操作函數(shù)等;
最后把設備字體增加到字體列表中。

1.4.2 初始化系統(tǒng)字體:InitSysFont()
位于src/font/sysfont.c中,運行過程如下:
利用GetMgEtcIntValue()從配置中讀取系統(tǒng)字體的數(shù)量,若字體數(shù)小于1則返回,若字體數(shù)大于6,則只使用前6種字體;
接著檢測這些字體信息是否正確,并創(chuàng)建邏輯字體;
最后將合法的字體根據(jù)配置一一填入對應的邏輯字體數(shù)組中。

1.4.3 初始化空閑方形區(qū)域塊列表:InitFreeClipRectList()
該宏定義位于include/gdi.h,它調(diào)用include/gdi.h中的InitBlockDataHeap()初始化空閑方形區(qū)域塊的信息(包括大小和個數(shù))。

1.4.4 初始化設備環(huán)境的范圍:dc_InitClipRgnInfo()
位于src/gdi/gdi.c中,
InitClipRgn()

1.4.5 初始化屏幕的DC:dc_Init_ScreenDC()
位于src/gdi/gdi.c中,運行過程如下:
初始化DC設置:
調(diào)用SetClipRgn()設置該DC的區(qū)域范圍。

1.4.5.1 設置DC的區(qū)域范圍:SetClipRgn()
位于src/gdi/cliprect.c,運行過程如下:
IsRectEmpty():位于src/gdi/rect.c中,檢測區(qū)域是否為空;
NormalizeRect():位于src/gdi/rect.c中,糾正錯誤的區(qū)域信息,即使區(qū)域left<>
ClipRectAlloc():該宏定義位于include/gdi.h,它調(diào)用src/kernel/blockheap.c中的BlockDataAlloc()從分配該區(qū)域的堆空間。

1.5 初始化窗體顏色:InitWindowElementColors()
位于src/sysres/syscfg.c中,通過調(diào)用src/gdi/draw.c中的RGB2Pixel()對顏色進行轉換。

1.6 初始化底層事件:InitLWEvent()
位于src/kernel/event.c中,運行過程如下:
GetDblclickTime():獲取雙擊間隔時間;
GetTimeout():獲取超時時間;
InitIAL():初始化輸入引擎;
ResetMouseEvent():重置鼠標事件;
ResetKeyEvent():重置鍵盤事件。

1.6.1 獲取雙擊間隔時間:GetDblclickTime()
位于src/kernel/event.c中,因為不支持鼠標,配置文件中沒有mouse相關選項,該函數(shù)直接返回。

1.6.2 獲取超時時間:GetTimeout()
位于src/kernel/event.c中,因為不支持鼠標,配置文件中沒有mouse相關選項,該函數(shù)直接返回。

1.6.3 初始化輸入引擎:InitIAL()
位于src/ial/ial.c中,運行過程如下:
獲取配置中ial_engine、mdev和mtype的配置信息;
查找配置的IAL引擎是否在該文件的inputs[]數(shù)組中,存在的話就把該引擎做為當前的IAL引擎;
IAL_InitInput():調(diào)用inputs數(shù)組中的IAL引擎初始化函數(shù)初始化IAL引擎。

1.7 初始化固定字符串:InitFixStr()
位于src/kernel/fixstr.c中,初始化一個結構體FixStrHeap,暫時不能理解它的用處。

1.8 初始化菜單:InitMenu()
位于src/gui/menu.c中。

1.9 初始化控制類:InitControlClass()
位于src/gui/ctrlclass.c中,注冊配置中支持的控件類。

1.10 初始化加速器:InitAccel()
位于src/gui/accelkey.c中。

1.11 開辟系統(tǒng)線程:SystemThreads()
位于src/kernel/init.c中,運行過程如下:
InitDesktop():初始化桌面;
InitFreeQMSGList():初始化空閑消息隊列;
InitMsgQueue():初始化消息隊列;
DesktopMain:創(chuàng)建桌面線程;
TimerEntry:創(chuàng)建定時器線程;
EventLoop:創(chuàng)建事件循環(huán)線程。

1.11.1 初始化桌面:InitDesktop()
位于src/kernel/desktop.c中,運行過程如下:
InitZOrderInfo():初始化桌面疊放次序;
InitFreeClipRectList():初始化空閑方形區(qū)域塊列表;
InitSystemRes():初始化系統(tǒng)資源;
InitWndManagementInfo():初始化窗體管理信息。

1.12 設置鍵盤布局:SetKeyboardLayout()
位于src/gui/keyboard.c中,在數(shù)組layouts[]中查找與指定鍵盤布局名稱相同的鍵盤設置,找到后調(diào)用相應的鍵盤初始化函數(shù)對按鍵圖和按鍵函數(shù)。
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MiniGUI 體系結構之四(一)圖形抽象層和輸入抽象層及 Native Engine 的實現(xiàn)
[轉帖]使用MiniGUI的一些FAQ
如何用MiniGUI設計小鍵盤輸入
安裝qvfb
MiniGUIUMA30Chapter05 < Products < TWiki
MiniGUI 的特色
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服