![MiniGUI概要設計.doc_第1頁](http://file.renrendoc.com/FileRoot1/2020-1/5/94060c27-1b16-4649-8415-8e904b863d5d/94060c27-1b16-4649-8415-8e904b863d5d1.gif)
![MiniGUI概要設計.doc_第2頁](http://file.renrendoc.com/FileRoot1/2020-1/5/94060c27-1b16-4649-8415-8e904b863d5d/94060c27-1b16-4649-8415-8e904b863d5d2.gif)
![MiniGUI概要設計.doc_第3頁](http://file.renrendoc.com/FileRoot1/2020-1/5/94060c27-1b16-4649-8415-8e904b863d5d/94060c27-1b16-4649-8415-8e904b863d5d3.gif)
![MiniGUI概要設計.doc_第4頁](http://file.renrendoc.com/FileRoot1/2020-1/5/94060c27-1b16-4649-8415-8e904b863d5d/94060c27-1b16-4649-8415-8e904b863d5d4.gif)
![MiniGUI概要設計.doc_第5頁](http://file.renrendoc.com/FileRoot1/2020-1/5/94060c27-1b16-4649-8415-8e904b863d5d/94060c27-1b16-4649-8415-8e904b863d5d5.gif)
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
MiniGUI 特性說明書本文檔說明 MiniGUI 所支持的功能特性。一、概述MiniGUI 是 Linux 控制臺上運行的,基于 SVGALib 和 LinuxThread 庫的多窗口圖形用戶界面支持系統(tǒng)。MiniGUI 采用了類 Win32 的 API 接口,實現了簡化的類 Windows 98 風格的圖形用戶界面。圖形用戶界面在許多情況下都優(yōu)于字符界面,其最大的優(yōu)點是使應用程序的操作簡單易學。在 MiniGUI 中,圖形用戶界面包括如下基本元素:圖 1.1 圖形用戶界面的基本元素1.1 窗口MiniGUI 中的窗口基本分四類,分別為主窗口、對話框、控件和主窗口中的窗片。MiniGUI 中的主窗口和 Windows 應用程序的主窗口概念類似,但略微有些不同,MiniGUI 中的每個主窗口對應于一個單獨的線程,通過函數調用可建立主窗口以及對應的線程。每個線程有一個消息隊列,主窗口從這一消息隊列中獲取消息并由窗口過程(回調函數)進行處理。MiniGUI 中的對話框是一種特殊的窗口,對話框一般和控件一起使用,這兩個概念和 Windows 的相關概念是類似的。MiniGUI 支持的控件類型有: 靜態(tài)框:文本、圖標或矩形框等。這種控件的屬性一般不會在運行時發(fā)生變化。 文本框:單行或多行的文本編輯框。 按鈕:單選鈕、復選框和一般按鈕等。 其他特殊控件。窗片是 MiniGUI 所特有的,窗片實際是主窗口的子窗口,只存在于主窗口中。為了處理上的方便,主窗口的子窗口只以平鋪的形式出現,因此我們將這種子窗口稱為“窗片”或“窗格”。窗片可以是私有的控件類型,也可以是標準的控件類型。1.2 消息和消息循環(huán)在Windows系列操作系統(tǒng)中,廣泛使用了消息驅動的概念。在MiniGUI中,我們也使用了消息驅動作為應用程序的創(chuàng)建構架。在消息驅動的應用程序中,計算機外設發(fā)生的事件,例如鍵盤鍵的敲擊、鼠標鍵的按擊等,都由支持系統(tǒng)收集,將其以事先的約定格式翻譯為特定的消息。應用程序一般包含有自己的消息隊列,系統(tǒng)將消息發(fā)送到應用程序的消息隊列中。應用程序可以建立一個循環(huán),在這個循環(huán)中讀取消息并處理消息,一直處理到特定的消息傳來為止。這樣的循環(huán)稱為消息循環(huán)。一般地,消息由代表消息的一個整型數和消息的附加參數組成。例如,鼠標左鍵的按下消息,可能由133這個數來表示,其附加參數可能包含按下時的鼠標所在位置信息。例如,MiniGUI中如下定義消息:typedef struct HWND hwnd; int message; WPARAM wParam; LPARAM lParam; .MSG;message 指定了特定的消息類型,wParam 是以unsigned int類型定義的消息的短參數,lParam 是以 long 類型定義的消息長參數。應用程序一般要提供一個處理消息的標準函數。在消息循環(huán)中,系統(tǒng)可以調用此函數,應用程序在此函數中處理相應消息。圖 1.2是一個消息驅動的應用程序的簡單構架示意。圖 1.2 消息驅動的應用程序的簡單構架在 MiniGUI 中,消息分為如下幾種類型: 系統(tǒng)消息,為系統(tǒng)內部管理使用。 鼠標消息,鼠標的點擊、移動等產生的消息。 鍵盤消息,鍵盤的按鍵消息。 窗口消息,窗口管理消息。 菜單消息,菜單管理消息。 命令消息等。1.3 窗口過程和窗口類窗口過程是用來處理窗口消息的函數過程。對于同一類型的控件,其窗口過程一般是一樣的。因此,系統(tǒng)一般利用窗口的窗口類名來區(qū)分不同的窗口類并調用不同的窗口過程。由于幾乎每一個主窗口均和其他窗口有著不同的窗口過程,因此,在 MiniGUI 中,窗口類的概念只存在于控件和窗片中。對于主窗口來說,其窗口過程在建立主窗口時指定,而對控件和窗片來說,則在注冊窗口類時指定,而在建立窗片或控件時指定所屬窗口類。1.4 句柄句柄是 MiniGUI 用來標識對象的標識符。句柄和指針概念類似,但它不一定是指針值。利用句柄,MiniGUI 將系統(tǒng)變量從應用項目中分離了出來,因為程序員只能通過句柄訪問對象,因而就沒有利用指針是可能發(fā)生的因非法訪問而導致的數據不一致問題。在 MiniGUI 中,窗口、控件、設備環(huán)境、菜單、圖標等均使用句柄訪問。二、窗口2.1 應用程序和主窗口我們將基于 MiniGUI 的一個會話(session)稱為一個應用項目,而其中每個單獨的線程或線程組稱為應用。每個應用項目可建立多個應用。主窗口是建立在 MiniGUI 基礎上的應用的主界面。MiniGUI 為每個主窗口建立單獨的消息隊列,在該主窗口基礎上派生出的窗片、對話框及其控件均使用同一消息隊列。在 MiniGUI 中,每個應用對應于一個線程。理論上講,每個應用可以具備多個主窗口,但在 MiniGUI 中,主窗口均以單獨的線程實現。但多個主窗口對應單一線程的情況也是可以在 MiniGUI 中實現的。每個應用項目有一個 MiniGUIMain 函數,在這個函數中,可建立初始的應用線程。在調用 MiniGUIMain 之前,MiniGUI 啟動自己的桌面窗口(Desktop)。桌面窗口作為 MiniGUI 的窗口管理器而存在。下面的代碼段在 MiniGUIMain 中啟動了三個主窗口線程:int MiniGUIMain(int args, char* arg) pthread_t thread, thread2, thread3; CreateThreadForMainWindow(&thread, NULL, TestWindowMain, 0); CreateThreadForMainWindow(&thread2, NULL, TestWindowMain2, 0); CreateThreadForMainWindow(&thread3, NULL, TestWindowMain3, 0); return 0;CreateThreadForMainWindow 函數為主窗口建立線程,并返回線程標識符。其中的第三個參數是線程的入口函數地址。如下的代碼段定義了上述代碼中第一個主窗口線程的入口函數:void InitCreateInfo(PMAINWINCREATE pCreateInfo) pCreateInfo-dwStyle = WS_THICKFRAME; pCreateInfo-spCaption = The first main window ; pCreateInfo-hMenu = 0; pCreateInfo-hCursor = GetSystemCursor(2); pCreateInfo-hIcon = LoadIconFromFile(res/table.ico); pCreateInfo-MainWindowProc = TestMainWinProc; pCreateInfo-lx = 50; pCreateInfo-ty = 50; pCreateInfo-rx = 300; pCreateInfo-by = 480; pCreateInfo-iBkColor = COLOR_lightwhite; pCreateInfo-dwAddData1 = 0; pCreateInfo-dwAddData2 = 0;void* TestWindowMain(void* data) MSG Msg; MAINWINCREATE CreateInfo; HWND hMainWnd; InitCreateInfo(&CreateInfo); if( !(hMainWnd = CreateMainWindow(&CreateInfo) ) return NULL; ShowWindow(hMainWnd, SW_SHOWNORMAL); while( GetMessage(&Msg, hMainWnd) ) DispatchMessage(&Msg); MainWindowThreadCleanup(hMainWnd); return NULL;在上面的代碼段中,該線程首先調用 CreateMainWindow建立了主窗口,然后調用 ShowWindow顯示了主窗口,最后啟動了消息循環(huán)。當消息循環(huán)因為接收到 MSG_QUIT 消息而終止時,該函數調用了 MainWindowThreadCleanup 清除了相關的線程數據。從上述代碼中可看出主函數不支持窗口類,在調用 CreateMainWindow 函數時直接指定主窗口的窗口過程地址。我們也可以從中看到主窗口所支持的其他屬性:1窗口風格。表 2.1 給出了所支持的窗口風格表 2.1 MiniGUI 支持的主窗口風格風格描述WS_BORDER創(chuàng)建一個具有單線邊框的窗口WS_THICKFRAME創(chuàng)建一個具有寬邊框的窗口WS_THINFRAME創(chuàng)建一個具有細邊框的窗口WS_CAPTION創(chuàng)建一個具有標題欄的窗口WS_HSCROLL創(chuàng)建一個具有水平滾動條的窗口WS_MAXMIZEBOX創(chuàng)建一個具有最大化框的窗口WS_MINIMIZEBOX創(chuàng)建一個具有最小化框的窗口WS_SYSMENU創(chuàng)建一個具有系統(tǒng)菜單的窗口WS_VSCROLL創(chuàng)建一個具有垂直滾動條的窗口WS_DISABLED創(chuàng)建一個初始為禁止的窗口WS_MAXIMIZE創(chuàng)建一個初始最大化的窗口WS_MINIMIZE創(chuàng)建一個初始最小化的窗口WS_VISIBLE創(chuàng)建一個初始可見的窗口WS_EX_TOPMOST創(chuàng)建一個頂層窗口,這是一個 Win32 的擴展風格2窗口標題。3窗口菜單。4窗口圖標。5窗口背景色。2.2 主窗口過程主窗口過程實際是一個回調函數,一般由 DispatchMessage 函數調用,用來處理應用的消息。主窗口過程一般如下定義:int TestMainWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) HDC hdc; int x, y; RECT client; static BITMAP bitmap; static BOOL fValid = FALSE; static int paintCount = 0; switch (message) case MSG_CREATE: SetTimer (hWnd, 100, 20); if(LoadBitmap(&bitmap, res/mnls.bmp) 0) fprintf (stderr, Test Main Win: Loading bitmap failure!n); else fValid = TRUE; break; case MSG_PAINT: hdc = BeginPaint (hWnd); testdc (hdc, fValid?&bitmap:NULL); EndPaint (hWnd, hdc); break; case MSG_LBUTTONDBLCLK: hdc = GetClientDC (hWnd); TextOut(hdc, 0, 0, Left button double clicked); ReleaseDC (hdc); PostMessage (hWnd, MSG_CLOSE, 0, 0); return 0; case MSG_TIMER: if (ISINBACKGROUND) break; paintCount+; if (paintCount % 10 != 0) hdc = GetClientDC (hWnd); GetClientRect (hWnd, &client); x = random() % (RECTW (client); y = random() % (RECTH (client); SetBrushColor(hdc, RGB2Index (hdc, random() % 256, random() % 256, random() % 256); FillBox(hdc, x, y, random() % RECTW (client), random() % RECTH (client); ReleaseDC (hdc); else InvalidateRect (hWnd, NULL, FALSE); break; case MSG_CLOSE: KillTimer (hWnd, 100); UnloadBitmap (&bitmap); DestroyMainWindow (hWnd); PostQuitMessage (hWnd); return 0; return DefaultMainWinProc(hWnd, message, wParam, lParam);主窗口有四個入口參數,分別是消息的目標窗口句柄、消息、消息的 WPARAM (即unsigned int) 型參數和 LPARAM (即long int) 型參數。在 32 位系統(tǒng)中,消息的兩個參數實際是等長度的。主窗口的窗口過程處理應用感興趣的消息,將其他消息傳遞給 DefaultMainWindProc 函數處理。2.3 桌面的應用項目接口當用戶在桌面上單擊鼠標右鍵時可彈出浮動式菜單,應用項目可通過桌面提供的接口在該菜單中添加菜單項,從而提供一定的靈活性。要利用桌面的應用項目接口,應用項目要實施兩個函數:void CustomizeDesktopMenu (HMENU hmnu, int iPos);int CustomDesktopCommand (int id);通過 CustomizeDesktopMenu 函數,應用項目可在桌面的浮動式菜單中添加菜單及菜單項。當用戶選擇了定制的菜單項時,MiniGUI 將調用 CustomDesktopCommand 函數,這時,應用項目就可以處理該菜單命令。2.4 對話框和控件對話框實際是一種特殊的主窗口。一般而言,對話框中包含有許多系統(tǒng)提供的控件。對話框和控件的設計目標是提供和 Win32 在源代碼級上的完全兼容。但某些復雜的控件不打算支持,對話框頁也不支持。MiniGUI 支持的控件有: 靜態(tài)控件。 按鈕控件。 編輯控件。 列表控件。 滾動條控件。 組合框控件。同時,MiniGUI 將提供標準的公共對話框: 文件打開對話框。 文件保存對話框。2.6 消息框MiniGUI 將提供和 Win32 完全兼容的消息框調用接口。2.6 窗片窗片是主窗口中子窗口的簡化支持,為了避免子窗口之間的互相剪切,而采用了平鋪式的子窗口實現,不考慮子窗口的互相剪切,因而也就不提供多文檔接口。也因為這個原因,我們將這種子窗口稱為窗片或窗格。窗片的建立和控件的建立方法一致。2.7 滾動支持將提供和 Win32 完全兼容的主窗口或子窗口的滾動支持。三、對話框、窗片和控件該部分功能尚未實現,其目標是提供和 WIN32 的80% 兼容。需要提供的接口分為如下幾類(注,我們將窗片和控件統(tǒng)稱為窗口,并嚴格區(qū)分“主窗口”和“窗口”這兩個名詞): 窗口類的注冊和注銷。 窗口的創(chuàng)建和銷毀。 對話框和控件管理。 常見控件消息、操作接口等的實現。四、消息及消息隊列在 MiniGUI 中,基本實現了 Win32 的消息處理函數。消息可通過如下函數發(fā)送: 通過 PostMessage 發(fā)送。消息發(fā)送到消息隊列后立即返回。這種發(fā)送方式稱為“郵寄”消息。如果消息隊列中的郵寄消息緩沖區(qū)滿,則該函數返回錯誤值。 通過 PostSyncMessage 發(fā)送。該函數用來向不同于調用該函數的線程消息隊列郵寄消息,并且只有該消息被處理之后,該函數才能返回,因此這種消息稱為“同步消息”。 通過 SendMessage 發(fā)送。該函數可以向任意一個窗口發(fā)送消息,消息處理完成之后,該函數返回。如果目標窗口所在線程和調用線程是同一個線程,該函數直接調用窗口過程,如果處于不同的線程,則利用 PostSyncMessage 函數發(fā)送同步消息。 通過 SendNotifyMessage 發(fā)送。該函數向指定的窗口發(fā)送通知消息,將消息放入消息隊列后立即返回。由于這種消息和郵寄消息不同,是不允許丟失的,因此,系統(tǒng)以鏈表的形式處理這種消息。 通過 SendAsyncMessage 發(fā)送。利用該函數發(fā)送的消息稱為“異步消息”,系統(tǒng)直接調用目標窗口的窗口過程。五、圖形設備接口圖形設備接口,即GDI, MiniGUI 中用來實現圖形輸出的模塊。5.1 基本概念5.1.1 圖形設備在 MiniGUI 中,采用了在 Windows 和 X Window 中普遍采用的圖形設備概念。每個圖形設備定義了計算機顯示屏幕上的一個矩形輸出區(qū)域。在調用圖形輸出函數時,均要求指定經初始化,或經建立的圖形設備上下文,或設備環(huán)境(DC)。每個圖形輸出均局限在圖形設備指定的矩形區(qū)域內。在多窗口系統(tǒng)中,各個圖形設備之間的輸出互相剪切,以避免圖形輸出之間互相影響。5.1.2 剪切域 剪切域就是在圖形設備上定義的一個區(qū)域,所有在該圖形設備上進行的圖形輸出,超過剪切域的部分,均被裁剪。只有在剪切域上的圖形輸出才是可見的輸出。 MiniGUI 中的剪切域,定義為矩形剪切域的集合。5.1.3 映射模式映射模式指定了特定圖形輸出的坐標值如何映射到圖形設備的坐標值。圖形設備的坐標系原點定義為圖形設備矩形區(qū)域的左上角。向右為正 X 坐標軸方向;向下為正 Y 坐標軸方向。這一坐標系稱為設備坐標系。 通過 GDI 模塊的映射模式操作函數,可定義自己的邏輯坐標系。邏輯坐標系可以是設備坐標系的水平或垂直反轉,縮放,或者偏移。 多數 GDI 輸出函數指定的是邏輯坐標系。默認情況下,邏輯坐標系和設備坐標系是重合的。5.2 GDI 功能特性的分類說明5.2.1 圖形設備能力通過調用函數GetGDCapability,可獲得圖形設備的如下能力: 顏色數目; 水平和豎直方向的象素點數; 設備坐標系中可見點的最大 x 和 y 坐標值。5.2.2 創(chuàng)建、銷毀或獲取、釋放圖形設備接口和 Win32 類似,MiniGUI 中也有一個 DC 的緩沖區(qū),應用可調用 GetDC 或 GetClientDC 函數從 DC 緩沖區(qū)中獲取圖形設備環(huán)境,在結束使用 DC 之后,應當調用 ReleaseDC 函數釋放 DC。應用也可以建立自己私有的 DC,這種 DC 可以是全局有效的 DC,由于免除了獲取和釋放以及初始化等工作,因此,利用這種 DC 可加速圖形顯示。當應用不再使用私有 DC 時,應當利用 DeletePrivateDC 刪除私有 DC。下面的代碼即利用了這種 DC:int TestMainWinProc2(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) static HDC hdc; HDC hPaintDC; int x, y; RECT client; static int count = 0; static BITMAP bitmap; static BOOL fValid = FALSE; static int paintCount = 0; switch (message) case MSG_CREATE: SetTimer (hWnd, 100, 20); SetTimer (hWnd, 200, 5); if(LoadBitmap(&bitmap, res/j11b.BMP) 0) fprintf (stderr, Test Main Win: Loading bitmap failure!n); else fValid = TRUE; break; case MSG_SHOWWINDOW: if (wParam = SW_SHOWNORMAL) hdc = CreatePrivateClientDC (hWnd); break; case MSG_PAINT: hPaintDC = BeginPaint (hWnd); testdc (hPaintDC, fValid?&bitmap:NULL); EndPaint (hWnd, hPaintDC); break; case MSG_LBUTTONDBLCLK: return 0; case MSG_TIMER: if (ISINBACKGROUND) break; if (wParam = 100) paintCount +; if (paintCount % 10 != 0) GetClientRect (hWnd, &client); x = random() % (RECTW (client); y = random() % (RECTH (client); SetPenColor(hdc, RGB2Index (hdc, random() % 256, random() % 256, random() % 256); LineTo(hdc, x, y); else InvalidateRect (hWnd, NULL, TRUE); else if (wParam = 200) if (count 5) Ping (); count +; else KillTimer (hWnd, 200); break; case MSG_CLOSE: KillTimer (hWnd, 100); KillTimer (hWnd, 200); UnloadBitmap (&bitmap); DeletePrivateDC (hdc); DestroyMainWindow (hWnd); PostQuitMessage (hWnd); return 0; return DefaultMainWinProc(hWnd, message, wParam, lParam);上述代碼在應用主窗口建立時創(chuàng)建了私有 DC,然后在定時器消息中利用私有 DC 進行繪制,最后在關閉窗口時刪除了私有 DC。MiniGUI 也支持內存中的虛擬 DC,可通過CreateCompatibleDC 建立內存 DC,利用這種 DC,可加速繪制過程,并減少繪制過程中閃爍現象。應用可使用DeleteCompatibleDC 函數刪除內存 DC。上述 DC 的創(chuàng)建或獲取與 Win32 API 有較明顯的不同。5.2.3 一般繪制屬性這類功能用來設置 DC 的繪制屬性,這些屬性及其影響的繪圖操作在表 5.1 中列出。表 5.1 一般繪圖屬性繪制屬性所影響的繪圖操作備注背景色文本輸出GetBkColor, SetBkColor背景模式文本輸出GetBkMode, SetBkMode文本顏色文本輸出GetTextColor, SetTextColor畫筆類型線條輸出只支持實型畫筆GetPenType, SetPenType畫筆顏色線條輸出GetPenColor, SetPenColor畫刷類型填充操作只支持實型畫刷GetBrushType, SetBrushType畫刷顏色填充操作GetBrushColor, SetBrushColor5.2.4 一般繪圖支持這類功能用來完成基本的繪圖功能,這些功能包括:畫點、直線、圓、矩形等。另外還有一些顏色轉換方面的功能,可以將特定的 RGB 轉換為最接近的 256 色調色板中的顏色索引值。接口函數由表 5.2 給出。表 5.2 一般繪圖支持函數功能說明SetPixel設置指定的象素顏色,顏色值以調色板索引給出。SetPixelRGB設置指定的象素顏色,顏色值以 RGB 值給出。GetPixel獲取指定點的象素顏色,以調色板索引給出。GetPixelRGB獲取指定點的象素顏色,以 RGB 值給出。RGB2Index完成 RGB 值到調色板索引值的轉換。MoveTo, LineTo繪制直線。Circle繪制圓。Rectangle繪制矩形。5.2.5 文本輸出支持這類功能用來利用系統(tǒng)字體輸出文本。可實現無格式文本(TextOut)和有格式文本(TabbedTextOut)的輸出。作為輔助函數,應用還可以利用GetTabbedTextExtent 函數來獲得格式化文本字符串的輸出尺寸。由于系統(tǒng)字體是等寬字體,無格式文本的輸出長度就等于單字節(jié)字符串個數乘以單個字符的寬度。利用 GetCharWidth 以及 GetCCharWidth 可獲取單字節(jié)字符以及雙字節(jié)字符(漢字)的寬度;利用 GetCharHeight 可獲取字符的高度。5.2.6 映射函數支持MiniGUI 支持的映射方式有兩種,一種和 Win32 的 MM_TEXT 映射方式一樣,即設備坐標系和邏輯坐標系是一致的;一種和 Win32 的MM_ANISOTROPIC 映射方式一樣,邏輯 x 和 y 軸可以以任意的比例映射到對應的坐標軸上。其他的 Win32 映射方式不被支持。通過函數 SetMapMode 設定映射方式。利用 SetWindowExt和 SetViewportExt 可設置 MM_ANISOTROPIC 映射方式的坐標軸方向、比例等。利用SetWindowOrg 和 SetViewPortOrg 可以設定原點位置。和上述函數的對應的 Get 函數組可用來獲取設定值。5.2.7 坐標轉換這類函數用來實現設備坐標到邏輯坐標的轉換。DPtoLP 將設備坐標轉換為邏輯坐標,LPtoDP 將邏輯坐標轉換為設備坐標。 5.2.8 剪切支持這類函數用來實現對 DC 剪切域的操作。和 Win32 不同的是,MiniGUI 的剪切域只支持矩形剪切域。ExcludeClipRect 可用來在當前剪切域中排除指定的矩形區(qū)域。IncludeClipRect 可用來在當前剪切域中包含指定的矩形區(qū)域。 CliprectIntersect 可用來將當前剪切域和指定矩形相交。SelectClipRect 將剪切域設置為指定矩形。GetBoundsRect 獲取包含當前剪切域的最大矩形。PtVisible 可判斷給定點是否處于剪切域。RectVisible 可判斷給定矩形是否和剪切域相交。5.2.9 位圖支持這類函數用來實現填充操作。利用 FillBox 可以以當前的畫刷類型和顏色填充指定矩形。利用 FillBoxWithBitmap 可以用指定的位圖填充指定矩形,如果有需要,該函數可進行位圖的縮放。利用 BitBlt 函數可在兩個 DC 之間復制圖象。利用 StretchBlt 函數可兩個 DC 之間復制圖象,并完成縮放。利用函數 LoadBitmap 可從Windows BMP文件中裝入位圖信息。UnloadBitmap 則卸載位圖信息。5.2.10 圖標支持MiniGUI 的圖標支持和 Win32 API 大致相同,包含如下幾種操作:創(chuàng)建和銷毀圖標:LoadIconFromFile、CreateIcon、DestroyIcon。圖標繪制支持:DrawIcon。根據需要 MiniGUI 將提供系統(tǒng)圖標集,及相應的操作函數。5.2.11 矩形支持這類函數提供了實現矩形相交,合并等一般性的操作,達到 Win32 的 95% 兼容。下面是這些函數的說明。1) SetRectvoid GUIAPI SetRect(RECT* prc, int left, int top, int right, int bottom);該函數將矩形 prc 設定為參數 left, top, right, bottom 指定的大小。2) SetRectEmptyvoid GUIAPI SetRectEmpty(RECT* prc);該函數將矩形 prc 設置為空矩形. 空矩形就是面積為 0 的矩形. 該函數將矩形的 left, top, right, bottom 值均設置為 0。3) CopyRectvoid GUIAPI CopyRect(RECT* pdrc, const RECT* psrc);該函數將矩形 psrc 復制到 pdrc 中。4) IsRectEmptyBOOL GUIAPI IsRectEmpty(const RECT* PRC);該函數判斷指定矩形是否為空矩形。若為空矩形,則函數返回 TRUE,否則返回 FALSE。5) EqualRectBOOL GUIAPI EqualRect(const RECT* prc1, const RECT* prc2);該函數判斷指定的兩個矩形是否是相等的矩形。相等的矩形其 left, top, right, bottom 值均相等。6) NormalizeRectvoid GUIAPI NormalizeRect(RECT* pRect);該函數將指定的矩形 pRect 進行正規(guī)化處理。矩形的正規(guī)化指滿足如下條件的矩形:left = right 并且 top = bottom。7) IntersectRectBOOL GUIAPI IntersectRect(RECT* pdrc, const RECT* psrc1, const RECT* psrc2);該函數求兩個矩形 psrc1 和 psrc2 的相交區(qū)域, 并在 pdrc 中返回相交矩形。如果 psrc1 和 psrc2 相交,函數返回為 TRUE。如果 psrc1 和 psrc2 不相交,函數返回為 FALSE,pdrc 為空矩形8) DoesIntersectBOOL GUIAPI DoesIntersect(const RECT* psrc1, const RECT* psrc2);該函數判斷兩個矩形是否相交。如果 psrc1 和 psrc2 相交,函數返回為 TRUE。如果 psrc1 和 psrc2 不相交,函數返回為 FALSE。9) UnionRectBOOL GUIAPI UnionRect(RECT* pdrc, const RECT* psrc1, const RECT* psrc2);該函數求兩個矩形 psrc1 和 psrc2 相并矩形,并在 pdrc 中返回相并矩形。如果 psrc1 和 psrc2 能夠進行相并操作,函數返回 TRUE。如果 psrc1 和 psrc2 不能進行相并操作,函數返回 FALSE,pdrc 為空矩形。10) SubtractRectBOOL GUIAPI SubtractREct(RECT* pdrc, const RECT* psrc1, const RECT* psrc2);該函數求兩個矩形 psrc1 和 psrc2 相減的矩形, 并在 pdrc 中返回結果矩形。如果 psrc1 和 psrc2 能夠進行相減操作, 函數返回 TRUE。如果 psrc1 和 psrc2 不能進行相減操作,函數返回 FALSE,pdrc 為空矩形。11) OffsetRectvoid GUIAPI OffsetRect(RECT* prc, int x, int y);該函數將矩形 prc 偏移指定的偏移量 x, y。12) InflateRectvoid GUIAPI InflateRect(RECT* prc, int cx, int cy);該函數將矩形 prc 的長和寬分別增加 cx 和 cy。13) PtInRectBOOL GUIAPI PtInRect(const RECT* prc, int x, int y);該函數判斷指定點(x, y)是否處于矩形 prc 中。如果指定點在矩形中,函數返回 TRUE;否則返回 FALSE。六、菜單MiniGUI 中的菜單接口和 Win32 90% 兼容,但有少許差別。在外觀上,MiniGUI 可為彈出式菜單定義一個菜單標題,可支持空的彈出式菜單;在內部結構和概念上也有一些小的差別。主要區(qū)別在于子菜單的定義上,子菜單即可以是一個完整的彈出式菜單,也可以是一個沒有彈出式菜單標題的子菜單。從另一個角度講,彈出式菜單是由標題以及一系列子菜單項組成的。MiniGUI 提供用來操作菜單的函數有:HMENU GUIAPI CreateMenu ();HMENU GUIAPI CreatePopupMenu ( PMENUITEMINFO pmii);HMENU GUIAPI CreateSystemMenu ();int GUIAPI InsertMenuItem (HMENU hmnu, int item, BOOL flag, PMENUITEMINFO pmii);int GUIAPI RemoveMenu (HMENU hmnu, int item, UINT flags);int GUIAPI DeleteMenu (HMENU hmnu, int item, UINT flags);int GUIAPI DestroyMenu (HMENU hmnu);上述這些函數用來操作菜單數據,可實現菜單的創(chuàng)建、銷毀,菜單項的添加、刪除等功能。int GUIAPI IsMenu (HMENU hmnu);該函數可用來判斷給定句柄是否為菜單句柄。HMENU GUIAPI SetMenu (HWND hwnd, HMENU hmnu);HMENU GUIAPI GetMenu (HWND hwnd);上述函數用于獲取或設置主窗口的菜單。void GUIAPI DrawMenuBar (HWND hwnd);int GUIAPI TrackMenuBar (HWND hwnd, int pos);int GUIAPI TrackPopupMenu (HMENU hmnu, UINT uFlags, int x, int y, HWND hwnd;HMENU GUIAPI GetMenuBarItemRect (HWND hwnd, int pos, RECT* prc);BOOL GUIAPI HiliteMenuBarItem (HWND hwnd, int pos, UINT flag);上述函數用于顯示并跟蹤菜單。int GUIAPI GetMenuItemCount (HMENU hmnu);int GUIAPI GetMenuItemID (HMENU hmnu, int pos); int GUIAPI GetMenuItemInfo (HMENU hmnu, int item, BOOL flag, PMENUITEMINFO pmii);int GUIAPI GetMenuItemRect (HWND hwnd, HMENU hmnu, int item, PRECT prc);HMENU GUIAPI GetPopupSubMenu (HMENU hpppmnu);HMENU GUIAPI GetSubMenu (HMENU hmnu, int pos);int GUIAPI GetSystemMenu (HWND hwnd, BOOL flag);UINT GUIAPI EnableMenuItem (HMENU hmnu, int item, UINT flags);int GUIAPI CheckMenuRadioItem (HMENU hmnu, int first, int last, int checkitem, UINT flags);int GUIAPI SetMenuItemBitmaps (HMENU hmnu, int item, UINT flags, PBITMAP hBmpUnchecked, PBITMAP hBmpChecked);int GUIAPI SetMenuItemInfo (HMENU hmnu, int item, BOOL flag, PMENUITEMINFO pmii);上述這些函數用于獲取或設置菜單屬性。七、定時器在 MiniGUI 中應用項目可用的定時器總共可有 16 個,而每個應用最多只能定義 8 個定時器。MiniGUI 中的定時器和 Win32 中使用定時器的方法是一樣的,但不支持定時器回調函數。MiniGUI 提供來操
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子競技產業(yè)商業(yè)模式的創(chuàng)新與探索
- 清潔保養(yǎng)在醫(yī)療安全中的重要性
- 2025年門禁控制器項目可行性研究報告
- 中國電子風量開關項目投資可行性研究報告
- 2025年江西贛州尋烏中電建新能源發(fā)電有限公司招聘筆試參考題庫附帶答案詳解
- 2025年中國電建山東電力建設第一工程有限公司招聘筆試參考題庫附帶答案詳解
- 2025年鎳銅鈷鹽類項目投資可行性研究分析報告-20241226-193404
- 知識經濟時代的知識產權質押融資價值挖掘
- 南京市棲霞區(qū)2024年七年級《語文》下冊期末試卷與參考答案
- 知識產權在提升國家競爭力中的作用
- 墨香里的年味兒(2023年遼寧沈陽中考語文試卷記敘文閱讀題及答案)
- 外研版小學五年級上冊英語閱讀理解專項習題
- 2024-2030年市政工程行業(yè)發(fā)展分析及投資戰(zhàn)略研究報告
- 高中數學教學方法都有哪些
- 濟寧醫(yī)學院成人高等教育期末考試《無機化學》復習題
- 汽車駕駛員高級工題庫與答案
- 《網絡安全防護項目教程》課件項目4 數據庫安全防護
- 手術室標本管理及送檢評分標準
- 新概念英語第二冊考評試卷含答案(第73-80課)
- 《物流無人機垂直起降場選址與建設規(guī)范(征求意見稿)》
- 中醫(yī)腕踝針技術
評論
0/150
提交評論