国产肉体XXXX裸体137大胆,国产成人久久精品流白浆,国产乱子伦视频在线观看,无码中文字幕免费一区二区三区 国产成人手机在线-午夜国产精品无套-swag国产精品-国产毛片久久国产

新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式用戶圖形接口uC/GUI的簡(jiǎn)單分析

嵌入式用戶圖形接口uC/GUI的簡(jiǎn)單分析

作者: 時(shí)間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

子/父窗口

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

客戶區(qū)

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

句柄

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

有效窗口/無效窗口

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

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

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

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

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

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

}

}

程序清單 4.1 建立一個(gè)自動(dòng)更新窗口的回調(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)機(jī)制 */

static void DemoRedraw(void)

{

GUI_HWIN hWnd;

while(1)

{

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

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)建一個(gè)前景窗 */

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

}

消息傳遞機(jī)制

程序清單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 : 窗口移動(dòng)就發(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)鍵詞:

評(píng)論


相關(guān)推薦

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

關(guān)閉