新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式用戶圖形接口uC/GUI在uC/OSII上的嵌入

        嵌入式用戶圖形接口uC/GUI在uC/OSII上的嵌入

        作者: 時間:2016-09-12 來源:網(wǎng)絡(luò) 收藏

        ◆ 子/父窗口

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

        ◆ 客戶區(qū)

        窗口的客戶區(qū)就是窗口的可用區(qū)。如果窗口包含方框或標題欄,則客戶區(qū)就是方框或標題欄的內(nèi)部區(qū)域。

        ◆ 句柄

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

        ◆ 有效窗口/無效窗口

        有效窗口是一個已經(jīng)完全更新,不需要重繪的窗口。不管是完全重繪還是局部重繪。當窗口內(nèi)容發(fā)生改變時,WM則標識窗口無效。下一次重繪之后(調(diào)用回調(diào)函數(shù)),窗口又變?yōu)橛行А?p>4.3.2回調(diào)機制

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

        4.3.3 回調(diào)函數(shù)的使用

        使用回調(diào)函數(shù)建立一個窗口時,必須有一個回調(diào)函數(shù)。所用的回調(diào)函數(shù)必須有如下原型:

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

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

        程序清單 4.1 建立一個自動更新窗口的回調(diào)函數(shù)

        void WinHandler (WM_MESSAGE * pMsg)

        {

        switch (pMsg->MsgId)

        {

        case: WM_PAINT GUI_SetBkColor(0xff00);

        GUI_Clear();

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

        Break;

        }

        }

        使用回調(diào)函數(shù),更為詳細的示例如程序清單4.2所示:

        程序清單4.2 回調(diào)函數(shù)

        #include GUI.H

        /* 背景窗的回調(diào)函數(shù) */

        static void cbBackgroundWin(WM_MESSAGE* pMsg)

        {

        switch (pMsg->MsgId)

        {

        case WM_PAINT: GUI_Clear();

        default: WM_DefaultProc(pMsg);

        }

        }

        /* 前景窗的回調(diào)函數(shù) */

        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);

        }

        }

        /* 回調(diào)機制 */

        static void DemoRedraw(void)

        {

        GUI_HWIN hWnd;

        while(1)

        {

        /*創(chuàng)建一個前景窗 */

        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();

        /* 設(shè)置背景窗的回調(diào)功能 */

        WM_SetCallback(WM_HBKWIN, cbBackgroundWin);

        /*創(chuàng)建一個前景窗 */

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

        /* 顯示前景窗*/

        GUI_Delay(1000);

        /*刪除前景窗 */

        WM_DeleteWindow(hWnd);

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

        GUI_Delay(1000);

        /* 刪除回調(diào)函數(shù) */

        WM_SetCallback(WM_HBKWIN, 0);

        }

        }

        void main(void)

        {

        GUI_Init();

        DemoRedraw();

        }

        4.3.4 消息傳遞機制

        程序清單4.2中,回調(diào)函數(shù)執(zhí)行的功能依賴于所接收到的消息。Switch語句中根據(jù)消息的類型,分別執(zhí)行不同的功能。

        WM_MESSAGE的成員如下:

        MsgId:消息類型

        HWin: 目的窗口

        HWinSrc: 源窗口

        Data.p : 數(shù)據(jù)指針

        Data.v: 數(shù)據(jù)值

        其中MsgId的類型如下:

        WM_PAINT: 窗口重繪

        WM_CREATE: 窗口一建立就發(fā)送

        WM_DELETE: 窗口一刪除就發(fā)送

        WM_SIZE : 窗口尺寸發(fā)生改變就發(fā)送

        WM_MOVE : 窗口移動就發(fā)送

        WM_SHOW : 接收到show命令就發(fā)送

        WM_HIDE : 接收到hide命令就發(fā)送

        WM_TOUCH: 觸摸屏信息

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

        #define MY_MESSAGE_AAA WM_USER +0

        #define MY_MESSAGE_BBB WM_USER +1


        上一頁 1 2 下一頁

        關(guān)鍵詞:

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 如东县| 阿鲁科尔沁旗| 凌云县| 宝丰县| 惠东县| 航空| 南昌县| 天气| 莱阳市| 若尔盖县| 塔城市| 滕州市| 阳谷县| 瑞昌市| 铁岭市| 阿拉善盟| 永康市| 沭阳县| 青冈县| 任丘市| 体育| 汉源县| 上饶市| 赤峰市| 墨玉县| 渑池县| 莫力| 中方县| 邮箱| 盐亭县| 英吉沙县| 当阳市| 米脂县| 涞源县| 枞阳县| 云霄县| 武穴市| 阳朔县| 西和县| 黔西县| 德阳市|