新聞中心

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