ucgui表單架構的學習之後,基本上我們能夠應用以前學到的各個知識點繪製一個簡單的視窗介面,包含按鈕,文字框,複選框,父子視窗等。按鈕,視窗,表單,複選框編寫程式的基本步驟:
1. 定義控制項控制代碼
2. 建立控制項
3. 設定控制項的背景顏色
4. 設定控制項的前景色彩
5. 設定控制項的文本字型
6. 設定控制項的文本對齊
7. 在控制項中間書寫名稱(GUI_DispStringHCenterAt(參數序列))
一般情況下都是經過以上七步,即可完成。但是有些控制項比如在按鈕使用過程中,它可能等待滑鼠點擊,點擊完成後又需要刪除,因此還要刪除該控制項。在一般使用過程中是不需要刪除的,我們在日常學習使用中都可以觀察得到,都是點擊了按鈕進行跳轉等。
****
建立視窗實踐:
通過查看視窗控制代碼hobj,桌面視窗的控制代碼數是1,其它視窗都在桌面視窗的基礎上建立,所以當重新第三個視窗的時候刪除第二個視窗,保證所有視窗都是在桌面視窗中建立。
WM_SetBkWindowColor(GUI_BLACK);
WM_SetCallback(WM_HBKWIN,&cbDesktop);//桌面視窗,cbDesktop只有顏色設定
GUI_Clear();
M_CreateWindow(WIN_MENU,cbMENUWin,WM_HBKWIN); //新視窗cbMENUWin
函數void M_CreateWindow(int win_id,WM_CALLBACK* cb,WM_HWIN winHObj) 參數中第一個是視窗的ID,第二個是新視窗的回呼函數,第三個是當前視窗控制代碼,如果不是案頭控制代碼1,則先刪除再建立。
if(winHObj!=WM_GetDesktopWindow())
WM_DeleteWindow(winHObj);
Curwin.Hwin=WM_CreateWindow(MMI_WINDOWS_X, MMI_WINDOWS_Y, MMI_WINDOWS_W, MMI_WINDOWS_H, WM_CF_MEMDEV|WM_CF_SHOW,cb, 0);
WM_SetCallback(Curwin.Hwin,cb);
WM_SetFocus(Curwin.Hwin);
****
以下是一個簡單的例子,用以學習基本架構的產生,在此基礎上還建立了以子視窗形式建立的視窗。現在的疑惑是以子視窗形似建立視窗是否只能在表單中進行,兩個表單之間應該可以,在平常點擊網頁時可以行的通,但還是不會編寫。
[code=cpp]#include "GUI.H"#include "FrameWin.h"#include "WM_Intern.h"#include <stddef.h>static WM_RESULT CallbackChild(WM_MESSAGE *pMsg){ WM_HWIN hWin= (FRAMEWIN_Handle)(pMsg->hWin); switch(pMsg->MsgId) { caseWM_PAINT: GUI_SetBkColor(GUI_BLUE); GUI_SetColor(GUI_WHITE); GUI_SetFont(&GUI_FontComic24B_ASCII); GUI_SetTextAlign(GUI_TA_HCENTER|GUI_TA_VCENTER); GUI_Clear(); GUI_DispStringHCenterAt("Childwindow",//來 自:S T_M8. CN WM_GetWindowSizeX(hWin)/2, WM_GetWindowSizeY(hWin)/2); break; }}static void DemoFramewin(void){ FRAMEWIN_Handle hFrame = FRAMEWIN_Create("Framewindow",NULL,WM_CF_SHOW,10,10,150,60); FRAMEWIN_SetFont(hFrame,&GUI_Font16B_ASCII); FRAMEWIN_SetTextColor(hFrame,GUI_RED); FRAMEWIN_SetBarColor(hFrame,0,GUI_GREEN); FRAMEWIN_SetTextAlign(hFrame,GUI_TA_HCENTER); WM_CreateWindowAsChild(0,0,0,0,hFrame,WM_CF_SHOW,CallbackChild,0);}void _MainTask(void)//應用程式開始{ DemoFramewin(); while(1) GUI_Delay(100);}//主函數void main(void) { GUI_Init(); GUI_Clear(); _MainTask(); }[/code]
其它建立方式:
先建兩個檔案,第一個的代碼如下: #include "GUI.H"#include <stddef.h> #include "FRAMEWIN.h" #include "text.h"// 來自: STM_8 .CN#include "button.h"BUTTON_Handle U2_hButton0;TEXT_Handle U2_hTEXT0;FRAMEWIN_Handle U2_hFRAMEWIN1;void MainTask1(void) { int r; GUI_Init(); GUI_SetBkColor(GUI_WHITE); GUI_ClearRect(0,0,320,240); GUI_SetColor(GUI_RED); WM_SetDesktopColor(GUI_WHITE); U2_hFRAMEWIN1=FRAMEWIN_Create("Gui_Form",NULL, WM_CF_SHOW,0,0,320,231); FRAMEWIN_AddCloseButton(U2_hFRAMEWIN1,1,0); FRAMEWIN_SetFont(U2_hFRAMEWIN1,&GUI_Font8x18); FRAMEWIN_SetMoveable(U2_hFRAMEWIN1,1); FRAMEWIN_SetText(U2_hFRAMEWIN1,"Gui_Form");// 來自: STM_8 .CN FRAMEWIN_SetTitleVis(U2_hFRAMEWIN1,0); U2_hTEXT0=TEXT_CreateEx(180,100,130,13,U2_hFRAMEWIN1,WM_CF_SHOW,0,20,"This is Form2"); TEXT_SetFont(U2_hTEXT0,&GUI_Font8x16); TEXT_SetText(U2_hTEXT0,"This is Form2"); TEXT_SetTextColor(U2_hTEXT0,GUI_RED); U2_hButton0=BUTTON_CreateEx(20,60,100,40,U2_hFRAMEWIN1,WM_CF_SHOW,0,30); BUTTON_SetText(U2_hButton0,"ShowWindows1"); GUI_SetFont(&GUI_Font8x18); GUI_DispStringAt("This is Form2",100,180); while(1) { r = GUI_GetKey(); if (r) { FRAMEWIN_Delete(U2_hFRAMEWIN1); BUTTON_Delete(U2_hButton0); GUI_ClearRect(0,0,320,240); MainTask(); } GUI_Exec(); GUI_Exec(); }}然後再建一個,將上面的代碼複製進去,將細節修改一下。代碼如下:#include "GUI.H"#include <stddef.h> #include "FRAMEWIN.h" #include "text.h"#include "button.h"BUTTON_Handle U1_hButton0;TEXT_Handle U1_hTEXT0;FRAMEWIN_Handle U1_hFRAMEWIN1;void MainTask(void) { int r; GUI_Init(); GUI_SetBkColor(GUI_WHITE); GUI_ClearRect(0,0,320,240); GUI_SetColor(GUI_RED); WM_SetDesktopColor(GUI_WHITE); U1_hFRAMEWIN1=FRAMEWIN_Create("Gui_Form",NULL, WM_CF_SHOW,0,0,320,231); FRAMEWIN_AddCloseButton(U1_hFRAMEWIN1,1,0); FRAMEWIN_SetFont(U1_hFRAMEWIN1,&GUI_Font8x18); FRAMEWIN_SetMoveable(U1_hFRAMEWIN1,1);// 來自: STM_8 .CN FRAMEWIN_SetText(U1_hFRAMEWIN1,"Gui_Form"); FRAMEWIN_SetTitleVis(U1_hFRAMEWIN1,0); U1_hTEXT0=TEXT_CreateEx(47,41,130,13,U1_hFRAMEWIN1,WM_CF_SHOW,0,20,"This is Form1"); TEXT_SetFont(U1_hTEXT0,&GUI_Font8x16); TEXT_SetText(U1_hTEXT0,"This is Form1"); TEXT_SetTextColor(U1_hTEXT0,GUI_RED); U1_hButton0=BUTTON_CreateEx(150,150,100,40,U1_hFRAMEWIN1,WM_CF_SHOW,0,30); BUTTON_SetText(U1_hButton0,"ShowWindows2"); GUI_SetFont(&GUI_Font8x18); GUI_DispStringAt("This is Form1",41,47); while(1) { r = GUI_GetKey(); if (r) { FRAMEWIN_Delete(U1_hFRAMEWIN1); BUTTON_Delete(U1_hButton0); GUI_ClearRect(0,0,320,240); MainTask1(); } GUI_Exec(); GUI_Exec(); }}