本章節為大家講解GUIX複選框的使用。通過複選框的回調事件實作複選框選中和取消選擇狀态的功能處理。
23.1初學者重要提示
23.2 GUIX Studio視窗控件每個參數的含義
23.3 GUIX Studio複選框控件每個參數的含義
23.4 GUIX Studio設定視窗回調事件
23.5 GUIX回調事件處理
23.6 實驗例程設計架構
23.7 實驗例程
23.8 總結
23.1 初學者重要提示
- 務必看第11章學習GUIX Studio的使用方法和第12章學習GUIX Studio生成的代碼移植到硬體平台的方法。
- 本章講解的複選框回調事件處理本質是複選框父視窗的回調函數裡面處理按鈕按下消息。
23.2 GUIX Studio視窗控件每個參數的含義
GUIX Studio中視窗控件每個參數的定義如下(了解每個參數的作用,做到心裡有底):

- Widget Type
控件類型。
- Windget Name
控件名
- Widget Id
控件ID
- User Data
控件使用者資料,通過宏定義GX_WIDGET_USER_DATA使能,隻是個簡單的int型變量。
- Left
- Top
視窗左上角位置。
- Width
- Height
視窗的寬和高。
- Border
邊界效果
- Transparent
設定透明,對應建立标志GX_STYLE_TRANSPARENT。
- Draw Selected
預設顯示選中狀态。
對應建立标志GX_STYLE_DRAW_SELECTED。
- Enabled
使能視窗,允許控件接收使用者輸入事件和産生輸出信号。
對應建立标志GX_STYLE_ENABLED。
- Accepts Focus
使能聚焦,對應标志GX_STATUS_ACCEPTS_FOCUS。
- Runtime Allocate
使能運作時動态申請和釋放記憶體。
- Normal fill
正常狀态填充色
- Seclected fill
選中狀态填充色
- Disable fill
禁止狀态填充色
- Template
将目前建立的視窗設定為模闆,可以通過GUIX Studio建立這種模闆
- Visible At Starup
設定GUIX首先顯示的界面。
- Draw Function
重繪函數。
- Event Functiong
事件處理函數。
- Wallpaper
設定背景圖
- Title Wallpaper
視窗将平鋪所有配置設定的背景圖到視窗用戶端。
對應宏定義GX_STYLE_TILE_WALLPAPER。
23.3 GUIX Studio複選框控件每個參數的含義
GUIX Studio中複選框控件的參數如下:
- Widget Type
控件類型。
- Windget Name
控件名。
- Widget Id
控件ID
- User Data
控件使用者資料,通過宏定義GX_WIDGET_USER_DATA使能。
隻是個簡單的int型變量。
- Left
- Top
視窗左上角位置。
- Width
- Height
視窗的寬和高。
- Border
邊界效果
- Transparent
設定透明。
對應建立标志GX_STYLE_TRANSPARENT。
- Draw Selected
預設顯示選中狀态。
對應建立标志GX_STYLE_DRAW_SELECTED。
- Enabled
使能視窗,允許控件接收使用者輸入事件和産生輸出信号。
對應建立标志GX_STYLE_ENABLED。
- Accepts Focus
使能聚焦,對應标志GX_STATUS_ACCEPTS_FOCUS。
- Runtime Allocate
使能運作時動态申請和釋放記憶體。
- Normal fill
正常狀态填充色
- Seclected fill
選中狀态填充色
- Disable fill
禁止狀态填充色
- Template
将目前建立的視窗設定為模闆,可以通過GUIX Studio建立這種模闆
- Visible At Starup
設定GUIX首先顯示的界面。
- Draw Function
重繪函數
- Event Functiong
事件處理函數
- Pushed
設定按鈕在按下或者選中狀态。
對應宏定義GX_STYLE_BUTTON_PUSHED。
- Toggle
設定按鈕為按下和取消按下兩種狀态,類似Checkbox控件。
對應宏定義GX_STYLE_BUTTON_TOGGLE
- Radio
類似Radio控件。
對應宏定義GX_STYLE_BUTTON_RADIO。
- Auto Repeat
長時間按下按鈕,使能連發功能。
對應宏定義GX_STYLE_BUTTON_REPEAT。
- String ID
按鈕字元ID。
- Text
按鈕字元内容。
- Font
按鈕字元字型。
- Text Align
按鈕字元對齊方式。
- Normal Text Color
按鈕字元顔色。
- Selected Text Color
選擇按鈕時,字元顔色。
- Disabled Text Color
取消按鈕選中時,字元顔色
- Private Text Copy
使能字元可以動态更新。
- Unchecked Pixelmap
未選中時位圖
- Checked Pixelmap
選中時位圖
- Unchecked Disabled
未選中時禁止态位圖
- Checked Disabled Pixelmap
選中時禁止态位圖
23.4 GUIX Studio設定視窗回調事件
GUIX Studio的設定方法與第11章一樣,我們這裡把控件的位置和大小做了調整,并為window視窗建立一個回調函數。
新調整的界面效果如下:
23.4.1 視窗事件回調設定
下面我們為視窗控件設定一個Event Function,此功能是視窗的事件回調函數。在這個回調函數裡面,大家可以處理各種事件。
這裡為Event Function設定的回調函數名為_cbEventWindow,然後就可以使用GUIX Studio生成新的代碼。生成的代碼移植到硬體平台的方法看第12章即可。
23.4.2 複選框控件ID設定
注意複選框的ID設定GUIX_ID_Checkbox0,後面要用到:
同樣的設定方法,第2個複選框的ID設定為GUIX_ID_Checkbox1:
23.4.3 複選框控件的圖檔設定
控件的圖檔設定在第22章有詳細說明,本章的添加方法是一樣的。為複選框添加三種狀态的圖檔,每個複選框添加三個:
23.5 GUIX回調事件處理
在GUIX Studio上設定好事件回調函數名後,剩下就是在程式裡面實作事件回調的處理,這裡把實作方法為大家做個說明。
23.5.1 視窗裡事件回調的消息處理(複選框選中和取消)
GUIX Studio視窗上複選框的選中和取消處理要在視窗事件回調函數裡面實作。視窗的Event Function事件回調函數實作架構如下:
UINT _cbEventWindow(GX_WINDOW *widget, GX_EVENT *event_ptr)
{
switch (event_ptr->gx_event_type)
{
/* 控件顯示事件 */
case GX_EVENT_SHOW:
break;
/* 複選框取消選中 */
case GX_SIGNAL(GUIX_ID_Checkbox0, GX_EVENT_TOGGLE_OFF):
break;
/* 複選框選中 */
case GX_SIGNAL(GUIX_ID_Checkbox0, GX_EVENT_TOGGLE_ON):
break;
default:
return gx_window_event_process(widget, event_ptr);
}
return 0;
}
事件回調函數還有很多其它事件供使用者使用。這個架構基本是固定的,大家直接調用即可,下面舉一個執行個體來說明複選框消息的使用。
23.5.2 視窗裡面複選框消息處理執行個體(重要)
執行個體代碼如下,本章教程配套例子也是用的這個代碼:
/*
*********************************************************************************************************
* 函 數 名: _cbEventWindow
* 功能說明: 視窗window的事件回調函數
* 形 參: widget 視窗句柄
* event_ptr 事件指針
* 返 回 值: 傳回0表示成功
*********************************************************************************************************
*/
UINT _cbEventWindow(GX_WINDOW *widget, GX_EVENT *event_ptr)
{
switch (event_ptr->gx_event_type)
{
/* 控件顯示事件 */
case GX_EVENT_SHOW:
/* 預設事件處理 */
gx_window_event_process(widget, event_ptr);
break;
/* 單選框GUIX_ID_Checkbox0的消息處理 */
case GX_SIGNAL(GUIX_ID_Checkbox0, GX_EVENT_TOGGLE_OFF):
bsp_LedOff(2);
break;
case GX_SIGNAL(GUIX_ID_Checkbox0, GX_EVENT_TOGGLE_ON):
bsp_LedOn(2);
break;
/* 單選框GUIX_ID_Checkbox1的消息處理 */
case GX_SIGNAL(GUIX_ID_Checkbox1, GX_EVENT_TOGGLE_OFF):
bsp_LedOff(4);
break;
case GX_SIGNAL(GUIX_ID_Checkbox1, GX_EVENT_TOGGLE_ON):
bsp_LedOn(4);
break;
default:
return gx_window_event_process(widget, event_ptr);
}
return 0;
}
- GX_EVENT_SHOW
視窗(控件)顯示事件。當視窗(控件)顯示時,會産生此消息,既可以附加到一個可見視窗(控件),也可以通過函數gx_widget_show()。視窗(控件)繪制前會産生此消息。
- gx_window_event_process
用于視窗(控件)的預設事件處理。
- GX_SIGNAL(GUIX_ID_Checkbox0, GX_EVENT_TOGGLE_OFF)
這裡是複選框GUIX_ID_Checkbox0取消選中的消息處理。檢測到複選框取消選中就會進入到這個消息。
- GX_SIGNAL(GUIX_ID_Checkbox0, GX_EVENT_TOGGLE_ON)
這裡是複選框GUIX_ID_Checkbox0選中的消息處理。檢測到複選框選中就會進入到這個消息。
- GX_SIGNAL(GUIX_ID_Checkbox1, GX_EVENT_TOGGLE_OFF)
- GX_SIGNAL(GUIX_ID_Checkbox1, GX_EVENT_TOGGLE_ON)
這裡是複選框GUIX_ID_Checkbox1的選中和取消選中的消息處理。
針對這個執行個體,推薦大家設定不同的參數看效果,熟練掌握這些函數的用法,這樣用起GUIX也得心應手。
23.6 實驗例程設計架構
本章例程的重點是GUIX定時器更新的實作,任務中專門為視窗設定了一個Event Function事件回調函數。
23.7 實驗例程
(注,如果是電阻屏,需要做觸摸校準,校準方法看本教程附件章節A)
配套例子:
本章節配套了如下兩個例子供大家移植參考:
- V6-2029_GUIX Checkbox Event Callback
GUIX Studio生成的代碼在硬體平台實際運作的工程,含有GCC,IAR,MDK AC5和AC6四個版本工程。
- V6-2030_GUIX Studio Checkbox Event Callback
GUIX Studio工程模闆,設計界面後,生成的檔案可直接添加到MDK,IAR和GCC軟體平台使用。
實驗目的:
- 本章主要學習GUIX的定時器更新功能。
實驗内容:
- 共建立了如下幾個任務,通過按下按鍵K1可以通過序列槽列印任務堆棧使用情況
App Task Start任務 :啟動任務,這裡用作BSP驅動包處理。
App Task MspPro任務 :消息處理,這裡用作LED閃爍。
App Task UserIF任務 :按鍵消息處理。
App Task GUI任務 :GUI應用任務。
App Task STAT任務 :統計任務。
App Task IDLE任務 :空閑任務。
GUIX System Thread :GUI系統任務。
System Timer Thread任務:系統定時器任務。
實驗效果:
GUIX Studio的界面設計如下:
序列槽列印任務執行情況:
IAR,MDK AC5和AC6工程可以序列槽列印任務執行情況:按開發闆的按鍵K1可以列印,波特率 115200,資料位 8,奇偶校驗位無,停止位 1:
Embedded Studio(GCC)平台的序列槽列印是通過其調試元件SEGGER RTT做的序列槽列印,速度也非常快,列印效果如下:
展示裡面有亂碼是因為Embedded Studio不支援中文。
23.8 總結
本章節主要為大家講解了GUIX複選框回調事件處理,大家可以測試複選框其它事件處理效果看看。