STM32——EMWIN CHECKBOX 控件(十六)

EMWIN

前言

复选框是选择各种不同选项的最常用小工具之一,用户可选中或取消选中复选框,并且可一次选中任意个框。使用键盘界面时,被聚焦的复选框的状态可使用空格键切换,禁用的框显示为灰色

一、通知代码

下面列举出了复选框小工具作为 WM_NOTIFY_PARENT 消息的一部分发送给其父窗口的消息类型:

WM_NOTIFICATION_CLICKED 复选框已被点击。
WM_NOTIFICATION_RELEASED 复选框已被释放。
WM_NOTIFICATION_MOVED_OUT 复选框已被点击,且指针已移出框并且没有释放。
WM_NOTIFICATION_VALUE_CHANGED 复选框的状态已改变。

二、 键盘反应

如果 CHECKBOX 控件具有输入焦点,则它将对如下所列的各键做出反应:

GUI_KEY_SPACE 切换小工具的选中状态。

三、CHECKBOX 控件 API 函数

CHECKBOX_CreateEx() 创建 CHECKBOX 小工具。
CHECKBOX_CreateIndirect() 从资源表项创建 CHECKBOX 小工具。
CHECKBOX_CreateUser() 使用额外字节作为用户数据创建 CHECKBOX 小工具。
CHECKBOX_GetDefaultBkColor() 返回 CHECKBOX 小工具文本的默认背景
CHECKBOX_GetDefaultFont() 返回用于显示 CHECKBOX 小工具文本的默认字体。
CHECKBOX_GetDefaultSpacing() 返回 CHECKBOX 小工具文本和框之间的默认间距。
CHECKBOX_GetDefaultTextAlign() 返回用于显示 CHECKBOX 小工具文本的默认对齐方式。
CHECKBOX_GetDefaultTextColor() 返回用于显示 CHECKBOX 小工具文本的默认文本颜色。
CHECKBOX_GetState() 返回复选框的当前状态。
CHECKBOX_GetText() 返回复选框的文本。
CHECKBOX_GetUserData() 检索使用 CHECKBOX_SetUserData()设置的数据。
CHECKBOX_IsChecked() 返回复选框的当前状态(选中或未选中)
CHECKBOX_SetBkColor() 设置给定 CHECKBOX 小工具的背景色。
CHECKBOX_SetBoxBkColor() 设置复选框区域的背景色。
CHECKBOX_SetDefaultBkColor() 设置 CHECKBOX 小工具的默认背景色。
CHECKBOX_SetDefaultFocusColor() 设置 CHECKBOX 小工具的默认焦点矩形颜色。
CHECKBOX_SetDefaultFont() 设置用于显示 CHECKBOX 小工具文本的默认字体。
CHECKBOX_SetDefaultImage() 设置复选框被选中后要显示的默认图像。
CHECKBOX_SetDefaultSpacing() 设置 CHECKBOX 小工具文本和框之间的默认间距。
CHECKBOX_SetDefaultTextAlign() 设置用于显示复选框文本的默认对齐方式。
CHECKBOX_SetDefaultTextColor() 设置用于显示CHECKBOX 小工具文本的默认文本颜色。
CHECKBOX_SetFocusColor() 设置聚焦框的颜色。
CHECKBOX_SetFont() 设置复选框字体。
CHECKBOX_SetImage() 设置复选框被选中后要显示的图像。
CHECKBOX_SetNumStates() 设置复选框的可能状态的数量(23)
CHECKBOX_SetSpacing() 设置框和复选框文本之间的间距。
CHECKBOX_SetState() 设置 CHECKBOX 小工具的状态。
CHECKBOX_SetText() 设置 CHECKBOX 小工具的文本。
CHECKBOX_SetTextAlign() 设置用于显示 CHECKBOX 小工具文本的对齐方式。
CHECKBOX_SetTextColor() 设置用于显示 CHECKBOX 小工具文本的颜色。
CHECKBOX_SetUserData() 设置 CHECKBOX 小工具的额外数据

三、CHECKBOX 控件演示例程

Segger 官方提供了一个关于 CHECKBOX 控件的演示例程,这里我们将这个例程移植到开发板中,学习一下 CHECKBOX 控件的使用方法

#include "checkboxdemo.h"
#include "GUI.h"
#include "DIALOG.h"
//对话框资源表
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
    
    
 {
    
     FRAMEWIN_CreateIndirect, "Check box sample",0,10,10,300,220, \
FRAMEWIN_CF_MOVEABLE},
 {
    
     TEXT_CreateIndirect, "Enabled:", 0, 5, 10, 120, 0 },
 {
    
     CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK0, 5, 30, 120, 0 },
 {
    
     CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK1, 5, 60, 120, 0 },
 {
    
     CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK2, 5, 90, 120, 20 },
 {
    
     CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK3, 5, 125, 120, 26 },
 {
    
     TEXT_CreateIndirect, "Disabled:", 0, 150, 10, 120, 0 },
 {
    
     CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK4, 150, 30, 120, 0 },
 {
    
     CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK5, 150, 60, 120, 0 },
 {
    
     CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK6, 150, 90, 120, 26 },
 {
    
     CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK7, 150, 125, 120, 26 },
 {
    
     BUTTON_CreateIndirect, "OK", GUI_ID_OK, 10, 165, 80, 30 },
 {
    
     BUTTON_CreateIndirect, "Cancel", GUI_ID_CANCEL, 200, 165, 80, 30 },
};
//复选框文本
static const char* _apLabel[]={
    
    
"Default",
"3 States",
"Box XL",
"Box XXL"
};
//回调函数
static void _cbCallback(WM_MESSAGE *pMsg)
{
    
    
int i;
int NCode,Id;
WM_HWIN hDlg,hItem;
hDlg = pMsg->hWin;
switch(pMsg->MsgId)
{
    
    
case WM_INIT_DIALOG:
//获取 CHECKBOX 的句柄
hItem = WM_GetDialogItem(hDlg,GUI_ID_CHECK0); 
for(i=0;i<8;i++) (1)
{
    
    
int Index=i%4;
//获取 CHECKBOX 的句柄
hItem = WM_GetDialogItem(hDlg,GUI_ID_CHECK0+i); (2) 
CHECKBOX_SetText(hItem,_apLabel[Index]);
switch(Index)
{
    
    
case 1: (3)
CHECKBOX_SetNumStates(hItem,3); (4)
CHECKBOX_SetImage(hItem,&_abmBar[0],\ (5)
CHECKBOX_BI_INACTIV_3STATE);
CHECKBOX_SetImage(hItem,&_abmBar[1],\ (6)
CHECKBOX_BI_ACTIV_3STATE);
CHECKBOX_SetState(hItem,2); (7)
break;
case 2: (8)
CHECKBOX_SetState(hItem,1);
CHECKBOX_SetImage(hItem,&_abmXL[0],\
CHECKBOX_BI_INACTIV_CHECKED);
CHECKBOX_SetImage(hItem,&_abmXL[1],\
CHECKBOX_BI_ACTIV_CHECKED);
CHECKBOX_SetFont(hItem,&GUI_FontComic18B_ASCII);
break;
case 3: (9)
CHECKBOX_SetState(hItem,1);
CHECKBOX_SetImage(hItem,&_abmXXL[0],\
CHECKBOX_BI_INACTIV_CHECKED);
CHECKBOX_SetImage(hItem,&_abmXXL[1],\
CHECKBOX_BI_ACTIV_CHECKED);
CHECKBOX_SetFont(hItem,&GUI_FontComic24B_ASCII);
break;
}
//失能对话框右边的所有 CHECK 小工具
if(i>=4)
{
    
    
WM_DisableWindow(hItem);
} }
break;
case WM_NOTIFY_PARENT:
Id=WM_GetId(pMsg->hWinSrc); //小工具 ID
NCode=pMsg->Data.v; //通知代码
switch(NCode)
{
    
    
case WM_NOTIFICATION_RELEASED:
if(Id==GUI_ID_OK)
{
    
    
GUI_EndDialog(hDlg,0); //关闭对话框
}
if(Id==GUI_ID_CANCEL)
{
    
    
GUI_EndDialog(hDlg,1); //关闭对话框
}
break;
}
break;
default:
WM_DefaultProc(pMsg);
}
 }
 //CHECKBOX 小工具演示 Demo
void CheckBoxDemo(void)
{
    
    
GUI_CURSOR_Show();
#if GUI_SUPPORT_MEMDEV
WM_SetCreateFlags(WM_CF_MEMDEV);
#endif
WM_SetDesktopColor(GUI_BLACK);
while(1)
{
    
    
GUI_ExecDialogBox(_aDialogCreate,GUI_COUNTOF(_aDialogCreate),\
&_cbCallback,0,0,0);
GUI_Delay(500);
} }

(1)、WM_INIT_DIALOG 消息下,用来初始化 CHECKBOX 控件,因为一共有 8 个
CHECKBOX,所以要循环设置 8 次。
(2)、根据 i 的不同获取各个 CHECKBOX 控件的句柄。
(3)、一共有四排 CHECKBOX 小工具,每排两个,8 个 CHECKBOX 的排序是按照从上到下,从左到右。
(4)、调用 CHECKBOX_SetNumStates()函数设置复选框的可选状态的数量,默认情况下复选框有 2 种状态,选中(1)和取消选中(0),使用函数 CHECKBOX_SetNumStates()可将可能状态增加到 3,如果复选框处于第三种状态,则该函数返回 2。
(5) 、 调 用 函 数 CHECKBOX_SetImage() 设 置 复 选 框 被 选 中 后 显 示 的 图 像 ,
CHECKBOX_SetImage()函数的第三个参数含义见表

CHECKBOX_BI_INACTIV_UNCHECKED 设置复选框被取消选中并禁用时显示的位图。
CHECKBOX_BI_ACTIV_UNCHECKED 设置复选框被取消选中并启用时显示的位图。
CHECKBOX_BI_INACTIV_CHECKED 设置复选框被选中并禁用时显示的位图。
CHECKBOX_BI_ACTIV_CHECKED 设置复选框被选中并启用时显示的位图。
CHECKBOX_BI_INACTIV_3STATE 设置复选框处于第三种状态并禁用时显示的位图。
CHECKBOX_BI_ACTIV_3STATE 设置复选框处于第三种状态并启用时显示的位图。

这里我们设置的是第二排复选框处于第三种状态并且在禁用时的显示位图。
(6)、同上,设置第二排复选框处于第三种状态并且在启用时显示的位图。
(7)、调用函数 CHECKBOX_SetState()设置复选框控件的状态,这里设置为 2,即第三种状态,函数 CHECKBOX_SetState()第二个参数允许设置的值见表
在这里插入图片描述
(8)、设置第二排两个复选框的属性。
(9)、设置第三排两个复选框的属性。
在这里插入图片描述
暂时还不懂有什么用,后面会用EMWIN结合物联网做一个界面。

猜你喜欢

转载自blog.csdn.net/qq_51963216/article/details/124068200