備註:(1)打開工程目錄下的"Exe\GUISimulationDebug.exe"即可看到效果。(2)看完教程000~005就基本會用emWin做項目,其他章節可以需要時再參考。
用emWin做界面,可以簡單理解爲每個C文件即對應一個頁面,如果要設計多個頁面的界面怎麼辦?生成多個界面C文件並在回調函數的操作觸發消息中用隱藏/顯示頁面函數:WM_HideWindow()和WM_ShowWindow()實現界面切換程序即可。
當界面有多個頁面需要切換顯示時,有兩種方式可以實現:(1)隱藏/顯示方式:程序啓動時創建所有頁面窗口,程序運行時隱藏當前無需顯示的頁面,同時顯示當前需要顯示的頁面;(2)刪除/創建方式:程序啓動時創建開機需要顯示的頁面窗口,程序運行時刪除當前無需顯示的頁面,同時創建當前需要顯示的頁面。
這兩種方式的根本區別是:第(1)種方式由於所有頁面都是真實存在的,因此佔用更多的內存。對於界面簡單的應用,或者CPU有足夠RAM的情況下,建議使用隱藏/顯示方式,因爲刪除/創建方式涉及到動態內存的申請和釋放,處理不當或程序不嚴謹容易出現內存錯誤造成死機現象,而且刪除/創建方式由於切換頁面時需要創建窗口,因此切換頁面時速度比隱藏/顯示方式更慢些。
這裏只說明通過隱藏/顯示的方式做頁面窗口切換,使用到emwin兩個窗口管理API函數:
void WM_HideWindow(WM_HWIN hWin); //隱藏窗口函數,hWin是窗口的句柄
void WM_ShowWindow(WM_HWIN hWin); //顯示窗口函數,hWin是窗口的句柄
......
case WM_NOTIFY_PARENT: //操作觸發消息處理(程序會跑到這裏),比如點擊按鍵、點擊編輯框(任何的操作)等等......
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id) {
case ID_BUTTON_1://ID爲ID_BUTTON_1的按鍵被點擊
switch(NCode) {
caseWM_NOTIFICATION_CLICKED: //按下動作消息
break;
caseWM_NOTIFICATION_RELEASED://彈起動作消息
WM_HideWindow(hPage[0]); //隱藏Page0
WM_ShowWindow(hPage[1]);//顯示Page1
break;
}
break;
}
break;
......
源碼/軟件下載
emWin 2天速成實例教程002_多個頁面窗口切換
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
emWin 2天速成實例教程004_軟件定時器(Timer)和位圖片動畫
emwin
2019-02-22 23:37:39
emWin 2天速成實例教程005_控件聚焦和用戶消息的使用方法
emwin
2019-02-22 23:37:39
emWin 2天速成實例教程003_Framewin和Window窗口控件和2D繪圖
emwin
2019-02-22 23:37:38
窗體編程之窗體的事件
ers456
2019-02-23 13:43:17
C#窗體間傳值的兩種方法
ccj188
2019-02-22 19:36:09
子窗體調用父窗體的方法
daimi5566
2019-02-22 18:57:15
C#裏WinForm開發中如何實現控件隨窗體大小的改變而自動適應其改變
鵲橋
2019-02-22 17:16:09
tmux的使用--窗口管理器
18801059706
2019-02-23 00:30:05
使用Qt編輯關閉窗口程序的一些見解
晴朗1106
2019-02-22 21:03:04
關於座標空間和轉換的說明
lwqlycy
2019-02-22 18:20:54
馮斌:JavaFx實例(八)“ShowFlowPane”
fengbin8606
2019-02-22 16:22:51
馮斌:JavaFx實例(三)“MultipleStageDemo”
fengbin8606
2019-02-22 16:22:49
eclipse 設置python 界面爲默認展示
小蝸牛_
2019-02-22 14:07:03
24小時熱門文章
-
再談23種設計模式(3):行爲型模式(學習筆記)
-
Power Automate Desktop 安裝完,登錄後老是提示one driver 錯誤
-
微前端學習筆記(4):從微前端到微模塊之EMP與hel-micro方案探索
-
微前端學習筆記(1):微前端總體架構概述,從微服務發微
-
985 碩士程序員,空窗 4 個月沒有 Offer!
-
一文搞懂 Spring 循環依賴
-
賽博鬥地主——使用大語言模型扮演Agent智能體玩牌類遊戲。
-
VScode右鍵打開(添加到右鍵)
-
記一次 .NET某工控視覺自動化系統 卡死分析
-
WindowsServer--SQL Server搭建主從同步實現讀寫分離 - 事務性分發