MSTAR-相关UI修改规范和使用_第1页
MSTAR-相关UI修改规范和使用_第2页
MSTAR-相关UI修改规范和使用_第3页
MSTAR-相关UI修改规范和使用_第4页
MSTAR-相关UI修改规范和使用_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ZUI Highly maintainable UI framework!Engin Lee 2007/7/27Developers: Joseph Chang, CheKuei Hsu, Engin Lee概要為了降低OSD GUI的開發及維護成本,我們提出ZUI這個開發流程,ZUI包含UI建立的架構程式碼,以及UI設計的工具程式,目標1. 讓UI和logic能夠更明確的切開2. 將修改UI時side effect降至最低3. 制定程式撰寫流程及規範,並提供教學文件4. UI designer或客戶能直接在UI工具程式上預覽及編輯5. 提供一套彈性化、可擴充的UI架構,使用者可自行設計新的c

2、ontrol或UI look and feel目前無法達成的目標:1. 希望能進一步切開GUI層和Controls,但因為8051的一些限制(如遞迴呼叫和XDATA記憶體),使這個目標無法達成,造成許多GUI export functions直接呼叫/判斷Control Data2. 本架構最原始版本是在MIPS上開發,後來嘗試移植到8051,發現有許多設計上的限制,所以大幅度改寫,因為8051限制條件較多,所以如果未來移植回MIPS會相對比較容易,但目前無此計劃。前提 / 假設事項由於HK51不允許函式遞迴呼叫,所以程式撰寫時有以下原則:1. 所有的controls都是靜態產生的,也就就在c

3、ompile time就決定好的,無法動態產生controls,以此架構有兩種方法實行: (A)將可能產生的control以隱藏的方式準備好,需要使用時再顯示出來;(B)若為條列式的資料可使用ListBox等等的control新增刪除資料筆數2. 所有的controls最基本的欄位有X,Y,Width,Height,Normal Style,Focus Style,Disabled Style,Normal Alpha,Focus Alpha,Disabled Alpha,Parent,Initial State,Window Proc ID,Private Data,Navigations

4、(Up, Down, Left, Right),Current Visible,Current Disable,其中只有Current Visible, Current Disable和位置寬高是可以動態修改的,其它的在設計時期就已經決定。3. GUI公開的函式,如MApp_ZUI_API_ShowWindow()等等,不可以使用MApp_ZUI_API_SendMessage()或call進window proc,只能透過MApp_ZUI_API_PostMessage()4. 基本上,所有的操作都在單一個GWIN上處理,可以簡化管理多個GWIN帶來的不便,但有可能會需要配置兩塊(on-sc

5、reen and off-screen)很大的framebuffer,需要有足夠的記憶體及頻寬。撰寫 / 使用原則1. 分成API,CTL和ACT三大區域,API掌握UI framework的基本操作,包含message的傳送和狀態的處理;而CTL管理各種不同的controls,有各種UI style和behavior,兩者儘可能是保持與系統運作和流程無關,例如不應該在API區撰寫某些按鍵的特別處理,或某些HWND的特別顯示 (只有HWND_MAINFRAME是特例處理),這些應該放在ACT區域。2. 函式以MApp_ZUI_為prefix,static變數和函式在最前面加上”_”字元,glo

6、bal變數在最前面加上”g_”3. MApp_ZUI_Main.h為整體GUI的進入點,提供對外的操作介面,非GUI的程式碼應該只需要include這個檔案,透過個介面來改變GUI及狀態,這些介面函式不屬於API,CTL或ACT。4. 每一個.c檔案使用類似#define CTL_ANI_DBG(x) /x來控制輸出debug message,submit到perforce時必須將debug message關閉,需要輸出時在自己local端打開。5. 儘可能減少Window Message的使用量,因為XDATA記憶體有限,所以無法提供很大的message queue,所以要儘量減少使用,例如

7、MSG_NOTIFY_SHOW和MSG_NOTIFY_HIDE就是為了避免Show/Hide window時post出過多的message,所以使用MApp_Menu_ACT_PostMessageFilter()來判斷是否需要post這些message。6. 在HK51上為了節省使用XDATA記憶體,所以message數量、可移動的control、timer數量都有限制,請參考MApp_ZUI_API_window.c前的#define ZUI_xxx7. 所有的Drawing流程都由ZUI main task來控制,都是被動的通知MSG_PAINT來畫,除了在MSG_PAINT以外,不可進

8、行drawing動作8. 在API,CTL區域不可針對某單一HWND做特別處理,所有需要特別處理的應該另外建立新的window proc或action來解決9. ZUI獨立於Top State Machine之外,所有的state都可以經由MApp_ZUI_Main.h提供的函式來操作,例如:傳送鍵盤事件,執行某action,初始化OSD page,關閉OSD page10. 與頁面UI相關的程式碼,例如處理鍵盤及控制focus等等,應以OSD page來作區隔,每個OSD page使用一個或多個MApp_ZUI_ACT檔案來描述。11. 除了少數欄位以外,不允許手動修改SkinTool產生的

9、INL檔內容,所有的GUI定義應以SkinTool project file為準,所以需修改屬性或座標時必需使用SkinTool。目前允許修改的欄位包含: Table_c.inl裡的winproc ID, window data及key map。12. 在程式內部儘可能不去hard code各種GUI座標,儘量使用function來查詢GUI元件的座標,或經過計算得出。13. 在程式內部儘可能不使用各種delay方式,因為這樣會導致無法即時顯示畫面。若要在GUI上暫停一段時間再繼續,請使用SetTimer()的方式註冊一個timer,在時間到時KillTimer()並隱藏畫面。14. 儘量將較

10、為獨立運作的功能給定一個action ID,將其放在execute action的部份,以利將來使用key map的方式customize。15. 在程式中儘量不去假設HWND的大小順序關係,例如if (HWND_ITEM_A = hwnd & hwnd null)10. ok (get color tool)試使用code指標困難1: compile flags for UI2. 動態show/hide的menu,某個menu裡的function有些在某些情況才出現,並有捲動顯示merge:1. Merge winproc.h (最好不要有=xxx)2. Merge table_c.inl

11、(winproc及key map部份)3. Merge XMLDoxygen:1. cd /cygdrive/d/MediaPlayer/ZUI2. doxygen ZUI.doxygen參考資料1. Function Pointers in Keil C: /appnotes/files/apnt_129.pdf1. Graphical User Interface Development System: /baum/graphics-GUI.html2. Event Driven Programming Systems: /jhodgson/gui/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论