STM32 - Control EMWIN CHECKBOX (dieciséis)

EMWI

prefacio

Las casillas de verificación son uno de los dispositivos más comunes para seleccionar una variedad de opciones diferentes, lo que permite a los usuarios marcar o desmarcar casillas y marcar cualquier cantidad de casillas a la vez. Al usar la interfaz del teclado, el estado de la casilla de verificación enfocada se puede alternar con la barra espaciadora, y las casillas deshabilitadas están atenuadas

1. Código de notificación

A continuación se enumeran los tipos de mensajes que un widget de casilla de verificación envía a su ventana principal como parte del mensaje WM_NOTIFY_PARENT:

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

2. Respuesta del teclado

Si el control CHECKBOX tiene foco de entrada, reaccionará a las teclas que se enumeran a continuación:

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

3. Función API de control de CHECKBOX

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 小工具的额外数据

3. Rutina de demostración del control CHECKBOX

Segger proporciona oficialmente una rutina de demostración sobre el control CHECKBOX. Aquí trasplantaremos esta rutina a la placa de desarrollo y aprenderemos a usar el control 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) Bajo el mensaje WM_INIT_DIALOG, se usa para inicializar el control CHECKBOX.Debido a que hay 8
CHECKBOX en total, debe configurarse 8 veces en un ciclo.
(2), de acuerdo a las diferentes obtengo el manejador de cada control CHECKBOX.
(3) Hay cuatro filas de dispositivos CHECKBOX, dos en cada fila. El orden de los 8 CHECKBOX es de arriba a abajo y de izquierda a derecha.
(4), llame a la función CHECKBOX_SetNumStates() para establecer el número de estados opcionales de la casilla de verificación. De manera predeterminada, la casilla de verificación tiene 2 estados, marcada (1) y sin marcar (0). Use la función CHECKBOX_SetNumStates() para configurar el posible El estado se incrementa a 3, y la función devuelve 2 si la casilla de verificación está en el tercer estado.
(5) Llame a la función CHECKBOX_SetImage() para configurar la imagen que se muestra después de seleccionar la casilla de verificación. El
significado del tercer parámetro de la función CHECKBOX_SetImage() se muestra en la tabla

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

Aquí configuramos el mapa de bits de visualización cuando la segunda fila de casillas de verificación está en el tercer estado y deshabilitada.
(6) Como se indicó anteriormente, configure el mapa de bits para que la segunda fila de casillas de verificación esté en el tercer estado y se muestre cuando esté habilitado.
(7), llame a la función CHECKBOX_SetState() para establecer el estado del control de la casilla de verificación, aquí se establece en 2, es decir, el tercer estado, se muestran los valores permitidos del segundo parámetro de la función CHECKBOX_SetState() en la Tabla
inserte la descripción de la imagen aquí
(8), configure las Propiedades de la segunda fila de las dos casillas de verificación.
(9), configure las propiedades de las dos casillas de verificación en la tercera fila.
inserte la descripción de la imagen aquí
No sé qué es por el momento, usaré EMWIN para combinar el Internet de las Cosas para hacer una interfaz más adelante.

Supongo que te gusta

Origin blog.csdn.net/qq_51963216/article/details/124068200
Recomendado
Clasificación