freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于linux和minigui的嵌入式系統(tǒng)軟件開(kāi)發(fā)指南畢業(yè)論文-文庫(kù)吧資料

2025-06-24 15:48本頁(yè)面
  

【正文】 x (const char* spClassName, const char* spCaption, 905 DWORD dwStyle, DWORD dwExStyle, int id, 906 int x, int y, int w, int h, HWND hParentWnd, DWORD dwAddData)。月歷控件monthcalendarCTRL_MONTHCALENDAR同上旋鈕控件spinboxCTRL_SPINBOX同上在 MiniGUI 中,通過(guò)調(diào)用 CreateWindow 函數(shù),可以建立某個(gè)控件類的一個(gè)實(shí)例。表 1 給出了 MiniGUI 預(yù)先定義的控件類和相應(yīng)類名稱定義。MiniGUI 提供了常用的預(yù)定義控件類,包括按鈕(包括單選鈕、復(fù)選鈕)、靜態(tài)框、列表框、進(jìn)度條、滑塊、編輯框等等。因?yàn)橹鞔翱诖a的可重用性一般很低,如果按照通常的方式為每個(gè)主窗口注冊(cè)一個(gè)窗口類的話,則會(huì)導(dǎo)致額外不必要的存儲(chǔ)空間,所以我們并沒(méi)有在主窗口提供窗口類支持。這樣就大大提高了代碼的可重用性。每一個(gè) GUI 系統(tǒng)都會(huì)預(yù)定義一些窗口類,常見(jiàn)的有按鈕、列表框、滾動(dòng)條、編輯框等等。這樣,如果程序需要建立一個(gè)窗口,就首先要確保選擇正確的窗口類,因?yàn)槊總€(gè)窗口類決定了對(duì)應(yīng)窗口實(shí)例的表象和行為。借用面向?qū)ο蟮男g(shù)語(yǔ),Windows 中的每個(gè)窗口實(shí)際都是某個(gè)窗口類的一個(gè)實(shí)例。在 Windows 中,程序所建立的每個(gè)窗口,都對(duì)應(yīng)著某種窗口類。比如,需要建立一個(gè)只允許輸入數(shù)字的編輯框時(shí),就可以通過(guò)重載已有編輯框而實(shí)現(xiàn),而不需要重新編寫(xiě)一個(gè)新的控件類。利用這些技術(shù),可以確保一致的人機(jī)操作界面,而對(duì)程序員來(lái)講,可以像搭積木一樣地組建圖形用戶界面。我們將 MiniGUI 中的所有子窗口均稱為控件。這些子窗口的行為和主窗口一樣,即能夠接收鍵盤(pán)和鼠標(biāo)等外部輸入,也可以在自己的區(qū)域內(nèi)進(jìn)行輸出――只是它們的所有活動(dòng)被限制在主窗口中。2 控件和控件類許多人對(duì)控件(或者部件,widget)的概念已經(jīng)相當(dāng)熟悉了。MiniGUI 也提供這種方法,通過(guò)建立對(duì)話框模板,就可以建立模態(tài)或者非模態(tài)的對(duì)話框。主要原因之一,就是程序代碼和用來(lái)建立控件的數(shù)據(jù)混在一起,不利于維護(hù)。通常,我們編寫(xiě)簡(jiǎn)單的圖形用戶界面時(shí),可以通過(guò)調(diào)用 CreateWindow 函數(shù)直接創(chuàng)建所有需要的子窗口,即控件。首先講解 MiniGUI 中的控件類和控件實(shí)例的關(guān)系,并舉例說(shuō)明控件子類化的概念及應(yīng)用;其次講解 MiniGUI 對(duì)話框的編程技術(shù),包括對(duì)話框模板的定義和對(duì)話框回調(diào)函數(shù)的編程;最后解釋模態(tài)對(duì)話框和非模態(tài)對(duì)話框之間的區(qū)別。最后,本文給出了一個(gè)簡(jiǎn)單的 MiniGUI 的示例程序,該程序建立窗口,并在其中打印Hello, world!。 8 小結(jié)本文描述了 MiniGUI 中與消息相關(guān)的幾個(gè)重要函數(shù),并講述了 MiniGUIThreads 和 MiniGUILite 在消息機(jī)制實(shí)現(xiàn)上的幾個(gè)不同。當(dāng)用戶單擊標(biāo)題欄上的關(guān)閉按鈕時(shí),MiniGUI 將發(fā)送 MSG_CLOSE 到窗口過(guò)程。}很顯然,這是一個(gè)非常簡(jiǎn)單的程序。 } MainWindowThreadCleanup (hMainWnd)。Msg, hMainWnd)) { DispatchMessage (amp。 if (hMainWnd == HWND_INVALID) return 1。 hMainWnd = CreateMainWindow (amp。endif InitCreateInfo (amp。 HWND hMainWnd。}int MiniGUIMain (int args, const char* arg[]){ MSG Msg。 pCreateInfodwAddData = 0。 pCreateInfoby = 240。 pCreateInfoty = 0。 pCreateInfoMainWindowProc = HelloWinProc。 pCreateInfohCursor = GetSystemCursor (0)。 pCreateInfospCaption = Hello, world! 。}static void InitCreateInfo (PMAINWINCREATE pCreateInfo){ pCreateInfodwStyle = WS_CAPTION | WS_VISIBLE。 return 0。 case MSG_CLOSE: DestroyMainWindow (hWnd)。 EndPaint (hWnd, hdc)。 switch (message) { case MSG_PAINT: hdc = BeginPaint (hWnd)。如果該消息的處理返回非零值,則將取消銷毀過(guò)程。 break。 hdc = BeginPaint (hWnd)。這時(shí),MiniGUI 將在處理完所有的郵寄消息、通知消息之后處理無(wú)效區(qū)域,并向窗口過(guò)程發(fā)送 MSG_PAINT 消息。MiniGUI 通過(guò)判斷窗口是否含有無(wú)效區(qū)域來(lái)確定是否需要重繪。注意,在 MSG_NCCREATE 消息被發(fā)送時(shí),窗口尚未正常建立,所以不能在 MSG_NCCREATE 消息中建立子窗口。這時(shí),應(yīng)用程序可以在其中創(chuàng)建子窗口。 return 0。 rcClientright = rcClientleft + _WIDTH。如果該消息的處理返回非零值,則將采用 lParam 當(dāng)中包含的大小值作為客戶區(qū)的大?。环駝t,將忽略該消息的處理。 MSG_SIZECHANGED該消息用來(lái)確定窗口客戶區(qū)的大小,和 MSG_SIZECHANGING 消息類似。wParam 包含了窗口大小 RECT 的指針。 return 0。 rcResultright = rcExpectleft + _WIDTH。 rcResultleft = rcExpectleft。你可以截獲該消息的處理,從而讓即將創(chuàng)建的窗口位于指定的位置,或者具有固定的大小,比如在 SPINBOX 控件中,就處理了該消息,使之具有固定的大小:case MSG_SIZECHANGING:{ const RECT* rcExpect = (const RECT*) wParam。MiniGUI 的默認(rèn)處理是,case MSG_SIZECHANGING: memcpy ((PRECT)lParam, (PRECT)wParam, sizeof (RECT))。 MSG_SIZECHANGING該消息窗口尺寸發(fā)生變化時(shí),或者建立窗口時(shí)發(fā)送到窗口過(guò)程,用來(lái)確定窗口大小。lParam 中包含了由 CreateMainWindow 傳遞進(jìn)入的 pCreateInfo 結(jié)構(gòu)指針。下面描述這些消息的概念和典型處理。 return 0。 // 銷毀主窗口 DestroyMainWindow (hWnd)。 // 銷毀子窗口 DestroyWindow(hWndButton)。 DestroyLogFont (logfont2)。一般而言,一個(gè)主窗口過(guò)程在接收到 MSG_CLOSE 消息之后會(huì)銷毀主窗口,并調(diào)用 PostQuitMessage 消息終止消息循環(huán)。 窗口的銷毀要銷毀一個(gè)主窗口,可以利用 DestroyMainWindow (hWnd) 函數(shù)。}注意,和 Windows 程序不同的是,在退出消息循環(huán)之后,還要調(diào)用一個(gè)函數(shù),即 MainWindowThreadCleaup 函數(shù)。 } MainWindowThreadCleanup (hWnd)。 DispatchMessage(amp。Msg, hWnd)) { TranslateMessage (amp。 // 顯示主窗口 ShowWindow (hWnd, SW_SHOWNORMAL)。CreateInfo)。 = HWND_DESKTOP。 = COLOR_lightwhite。 = 640。 = 0。 = 0。 = createmenu()。 = MiniGUI step three。 HWND hWnd。如下所示:int MiniGUIMain (int args, const char* arg[]){ MSG Msg。 在準(zhǔn)備好MAINWINCREATE 結(jié)構(gòu)之后,就可以調(diào)用 CreateMainWindow 函數(shù)建立主窗口了。這個(gè)函數(shù)就是主窗口的窗口過(guò)程。當(dāng)然,這只在 MiniGUIThreads 版本中有效。 2. :該域表示的是將要建立的主窗口使用哪個(gè)主窗口的消息隊(duì)列。該域是一個(gè) 32 位的值,因此可以把所有需要傳遞給窗口的參數(shù)編制成一個(gè)結(jié)構(gòu),而將結(jié)構(gòu)的指針賦予該域。MiniGUI 卻沒(méi)有在主窗口中使用窗口類的概念。在建立主窗口之后,程序進(jìn)入消息循環(huán)。不過(guò)稍微有點(diǎn)不同。 2. 在 WndProc () 中,負(fù)責(zé)對(duì)發(fā)到窗口中的各種消息進(jìn)行響應(yīng)。不過(guò)也有一些差別。5 窗口的建立和銷毀 窗口的建立我們知道,MiniGUI 的 API 類似 Win32 的 API。從一個(gè)線程向另外一個(gè)線程發(fā)送或者郵寄消息時(shí),必須通過(guò)互斥處理保護(hù)消息隊(duì)列。內(nèi)建多線程處理是。所有窗口共享一個(gè)消息隊(duì)列。GetMessage 在從指定消息隊(duì)列中獲取消息時(shí),會(huì)檢查該標(biāo)志,如果有 QS_QUIT 標(biāo)志,GetMessage 消息將返回 FALSE,從而可以利用該返回值終止消息循環(huán)。通過(guò)該函數(shù)發(fā)送的消息一般稱為通知消息,一般用來(lái)從控件向其父窗口發(fā)送通知消息。SendNotifyMessage:該函數(shù)和 PostMessage 消息類似,也是不等待消息被處理即返回。在 MiniGUIThreads 當(dāng)中,如果發(fā)送消息的線程和接收消息的線程不是同一個(gè)線程,發(fā)送消息的線程將阻塞并等待另一個(gè)線程的處理結(jié)果,然后繼續(xù)運(yùn)行;否則,SendMessage 函數(shù)將直接調(diào)用接收消息窗口的窗口過(guò)程函數(shù)。SendMessage:該函數(shù)和 PostMessage 函數(shù)不同,它在發(fā)送一條消息給指定窗口時(shí),將等待該消息被處理之后才會(huì)返回。PostMessage 一般用于發(fā)送一些非關(guān)鍵性的消息。如果消息隊(duì)列中的郵寄消息緩沖區(qū)已滿,則該函數(shù)返回錯(cuò)誤值。PostMessage:該函數(shù)將消息放到指定窗口的消息隊(duì)列后立即返回。而在 MiniGUILite 版本中,只有一個(gè)消息隊(duì)列,GetMessage 將從該消息隊(duì)列當(dāng)中獲得所有的消息,而忽略 hMainWnd 參數(shù)。在 MiniGUIThreads 版本中,每個(gè)建立有窗口的 GUI 線程有自己的消息隊(duì)列,而且,所有屬于同一線程的窗口共享同一個(gè)消息隊(duì)列。Msg)。Msg)。典型的消息循環(huán)如下所示:while (GetMessage (amp。在理解消息之后,我們看消息循環(huán)。當(dāng)然,用戶也可以自定義消息,并定義消息的 wParam 和 lParam 意義。比如,對(duì)鼠標(biāo)消息而言,lParam 中一般包含鼠標(biāo)的位置信息,而 wParam 參數(shù)中則包含發(fā)生該消息時(shí),對(duì)應(yīng)的 SHIFT 鍵的狀態(tài)信息等。一個(gè)消息由該消息所屬的窗口(hwnd)、消息編號(hào)(message)、消息的 WPARAM 型參數(shù)(wParam)以及消息的 LPARAM 型參數(shù)(lParam)組成。 366 endif 367 }MSG。 362 endif 363 POINT pt。 358 ifdef _LITE_VERSION 359 unsigned int time。 356 WPARAM wParam。2 消息和消息循環(huán)在 MiniGUI 中,消息被如下定義(include/):352 typedef struct _MSG 353 { 354 HWND hwnd。這些消息當(dāng)中,有一些是基本的輸入設(shè)備事件,而有一些則是與窗口管理相關(guān)的邏輯消息。本文將具體描述 MiniGUI 中用來(lái)處理消息的幾個(gè)重要函數(shù),并描述 MiniGUIThreads 和 MiniGUILite 在消息循環(huán)實(shí)現(xiàn)上的一些不同。事件驅(qū)動(dòng)的含義就是,程序的流程不再是只有一個(gè)入口和若干個(gè)出口的串行執(zhí)行線路;相反,程序會(huì)一直處于一個(gè)循環(huán)狀態(tài),在這個(gè)循環(huán)當(dāng)中,程序從外部輸入設(shè)備獲取某些事件,比如用戶的按鍵或者鼠標(biāo)的移動(dòng),然后根據(jù)這些事件作出某種的響應(yīng),并完成一定的功能,這個(gè)循環(huán)直到程序接受到某個(gè)消息為止。本文還講述了在 MiniGUI 中的窗口建立和銷毀過(guò)程,并解釋了窗口過(guò)程的概念以及對(duì)一些重要消息的處理。而窗口則是圖形用戶界面的最基本交互元素。 主題二:理解消息循環(huán)和窗口過(guò)程在利用 MiniGUI 開(kāi)發(fā)應(yīng)用程序之前,首先要理解的兩個(gè)概念就是消息循環(huán)和窗口過(guò)程。圖 4 某公司開(kāi)發(fā)的基于 MiniGUI 的 PDA 軟件架構(gòu)5:小結(jié)本文講解了 MiniGUIThreads 和 MiniGUILite 之間的區(qū)別,并舉例說(shuō)明了基于這兩個(gè)不同版本的不同軟件架構(gòu)。當(dāng)應(yīng)用程序之間需要通訊時(shí),可以
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1