新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式用戶圖形接口uC/GUI的簡單分析

        嵌入式用戶圖形接口uC/GUI的簡單分析

        作者: 時間:2016-10-08 來源:網絡 收藏

        子/父窗口

        子窗口是相對于父窗口定義的窗口。無論何時,只要父窗口移動,則子窗口們都要相應移動。子窗口被父窗口完全包含。擁有同一個父窗口的子窗口們互相間稱為兄弟。

        客戶區

        窗口的客戶區就是窗口的可用區。如果窗口包含方框或標題欄,則客戶區就是方框或標題欄的內部區域。

        句柄

        當一個新的窗口被創建時,WM分配一個唯一的標識符,稱為句柄。句柄用在后續對該窗口操作的所有函數中,而且可以利用該句柄唯一標識該窗口。

        有效窗口/無效窗口

        有效窗口是一個已經完全更新,不需要重繪的窗口。不管是完全重繪還是局部重繪。當窗口內容發生改變時,WM則標識窗口無效。下一次重繪之后(調用回調函數),窗口又變為有效。

        回調機制

        uC/GUI提供給窗口和窗口控件的回調機制的背后,是一個事件驅動標志。在大多數的窗口系統中,流控不僅僅時從用戶程序到圖形系統,而且還要能夠從用戶程序到圖形系統,并且能夠通過用戶程序提供的回調函數,返回到用戶程序。這個機制,就稱為回調機制。在uC/GUI中,回到機制用來在窗口管理中出控制窗口的重繪操作,這使得窗口管理的有效性成為可能。

        回調函數的使用

        使用回調函數建立一個窗口時,必須有一個回調函數。所用的回調函數必須有如下原型:

        void callback (WM_MESSAGE *pMsg)。 其中pMsg為指向消息的指針。

        回調函數執行的功能依賴于所接收到的消息。以上原型后一般跟著switch表達式,表達式定義不同的case表達式下不同的信息對應的不同行為,至少要有一個重繪函數:WM_PAINT()。如程序清單4.1,建立一個自動更新窗口的回調函數

        void WinHandler (WM_MESSAGE * pMsg)

        {

        switch (pMsg->MsgId)

        {

        case: WM_PAINT GUI_SetBkColor(0xff00);

        GUI_Clear();

        GUI_DispStringAt(“hello world”,0,0);

        Break;

        }

        }

        程序清單 4.1 建立一個自動更新窗口的回調函數:

        #include GUI.H

        /* 背景窗的回調函數 */

        static void cbBackgroundWin(WM_MESSAGE* pMsg)

        {

        switch (pMsg->MsgId)

        {

        case WM_PAINT: GUI_Clear();

        default: WM_DefaultProc(pMsg);

        }

        }

        /* 前景窗的回調函數 */

        static void cbForegroundWin(WM_MESSAGE* pMsg)

        {

        switch (pMsg->MsgId)

        {

        case WM_PAINT: GUI_SetBkColor(GUI_GREEN);

        GUI_Clear();

        GUI_DispString(Foreground window);

        default: WM_DefaultProc(pMsg);

        }

        }

        /* 回調機制 */

        static void DemoRedraw(void)

        {

        GUI_HWIN hWnd;

        while(1)

        {

        /*創建一個前景窗 */

        hWnd = WM_CreateWindow(10, 10, 100, 100, WM_CF_SHOW, cbForegroundWin, 0);

        /*顯示前景窗*/

        GUI_Delay(1000);

        /* 刪除前景窗 */

        WM_DeleteWindow(hWnd);

        GUI_DispStringAt(Background of window has not been redrawn, 10, 10);

        /* 等待,顯示并不重繪 */

        GUI_Delay(1000);

        GUI_Clear();

        /* 設置背景窗的回調功能 */

        WM_SetCallback(WM_HBKWIN, cbBackgroundWin);

        /*創建一個前景窗 */

        hWnd = WM_CreateWindow(10, 10, 100, 100,WM_CF_SHOW, cbForegroundWin, 0);

        /* 顯示前景窗*/

        GUI_Delay(1000);

        /*刪除前景窗 */

        WM_DeleteWindow(hWnd);

        /* 等待,顯示將重繪*/

        GUI_Delay(1000);

        /* 刪除回調函數 */

        WM_SetCallback(WM_HBKWIN, 0);

        }

        }

        void main(void)

        {

        GUI_Init();

        DemoRedraw();

        }

        消息傳遞機制

        程序清單4.2中,回調函數執行的功能依賴于所接收到的消息。Switch語句中根據消息的類型,分別執行不同的功能。

        WM_MESSAGE的成員如下:

        MsgId:消息類型

        HWin: 目的窗口

        HWinSrc: 源窗口

        Data.p : 數據指針

        Data.v: 數據值

        其中MsgId的類型如下:

        WM_PAINT: 窗口重繪

        WM_CREATE: 窗口一建立就發送

        WM_DELETE: 窗口一刪除就發送

        WM_SIZE : 窗口尺寸發生改變就發送

        WM_MOVE : 窗口移動就發送

        WM_SHOW : 接收到show命令就發送

        WM_HIDE : 接收到hide命令就發送

        WM_TOUCH: 觸摸屏信息

        應用程序還可以為自己定義額外的消息。為保證它們不用到uC/GUI的消息ID,用戶定義的消息從WM_USER后面開始,如:

        #define MY_MESSAGE_AAA WM_USER +0

        #define MY_MESSAGE_BBB WM_USER +1


        上一頁 1 2 下一頁

        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 若尔盖县| 盐城市| 慈利县| 宁强县| 重庆市| 长春市| 江油市| 新绛县| 五莲县| 汝城县| 灵武市| 丰镇市| 平阳县| 霍山县| 庐江县| 高邑县| 沁源县| 延边| 赤水市| 班戈县| 邵阳市| 台前县| 咸阳市| 兴业县| 张家口市| 从江县| 南昌县| 图木舒克市| 天门市| 教育| 玛多县| 文水县| 湄潭县| 酉阳| 友谊县| 宁远县| SHOW| 宝应县| 江都市| 晋江市| 菏泽市|