STM32 - Control EMWIN FRAMEWIN (19)

EMWI

prefacio

Las ventanas de marco proporcionan a nuestra aplicación una apariencia de ventana similar a la de una aplicación de PC. Estas ventanas constan de un marco circundante, una barra de título y un área de usuario. El color de la barra de título cambia para indicar si la ventana está activa.

1. Introducción al control FRAMEWIN

La apariencia del control FRAMEWIN se muestra en la figura:
inserte la descripción de la imagen aquí
también podemos adjuntar botones predefinidos a la barra de título, como los botones de maximizar, minimizar y cerrar. La
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
ventana de marco en realidad se compone de 2 tipos de ventanas: la ventana principal y la ventana secundaria. -ventana, la subventana se llama Para ventanas de cliente, es importante tener esto en cuenta cuando se trata de funciones de devolución de llamada: hay 2 tipos de ventanas con 2 funciones de devolución de llamada diferentes. Cuando se crean ventanas secundarias, estas ventanas secundarias generalmente se crean como secundarias de la ventana del cliente; por lo tanto, su ventana principal es la ventana del cliente.
inserte la descripción de la imagen aquí

2. Función API de control FRAMEWIN

FRAMEWIN_AddButton() 在标题栏中添加一个按钮。
FRAMEWIN_AddCloseButton() 在标题栏中添加一个“关闭”按钮。
FRAMEWIN_AddMaxButton() 在标题栏中添加一个“最大化”按钮。
FRAMEWIN_AddMenu() 向框架窗口添加一个“菜单”按钮。
FRAMEWIN_AddMinButton() 在标题栏中添加一个“最小化”按钮。
FRAMEWIN_Create() 创建一个 FRAMEWIN 小工具。
FRAMEWIN_CreateAsChild() 创建一个 FRAMEWIN 小工具作为子窗口。
FRAMEWIN_CreateEx() 创建一个 FRAMEWIN 小工具。
FRAMEWIN_CreateIndirect() 从资源表项创建 FRAMEWIN 小工具。
FRAMEWIN_CreateUser()
使用额外字节作为用户数据创建一个 FRAMEWIN 小
工具
FRAMEWIN_GetActive() 返回框架窗口是否处于激活状态。
FRAMEWIN_GetBarColor() 返回标题栏的颜色。
FRAMEWIN_GetBorderSize() 返回边框的尺寸。
FRAMEWIN_GetDefaultBarColor() 返回标题栏的默认颜色。
FRAMEWIN_GetDefaultBorderSize() 返回默认的边框尺寸。
FRAMEWIN_GetDefaultClientColor() 返回客户区的默认颜色。
FRAMEWIN_GetDefaultFont() 返回标题栏使用的默认字体
FRAMEWIN_GetDefaultTextColor() 返回标题的默认文本颜色。
FRAMEWIN_GetDefaultTitleHeight() 返回标题栏的默认尺寸。
FRAMEWIN_GetFont() 返回标题文本所用的字体。
FRAMEWIN_GetText() 返回标题文本。
FRAMEWIN_GetTextAlign() 返回标题文本的对齐方式。
FRAMEWIN_GetTitleHeight() 返回标题栏的高度。
FRAMEWIN_GetUserData() 检索用 FRAMEWIN_SetUserData()设置的数据。
FRAMEWIN_IsMinimized() 返回表示框架窗口是否最小化的值。
FRAMEWIN_IsMaximized() 返回表示框架窗口是否最大化的值。
FRAMEWIN_Maximize() 将框架窗口放大到父窗口的尺寸。
FRAMEWIN_Minimize() 隐藏框架窗口的客户区。
FRAMEWIN_OwnerDraw() 用于绘制标题栏的默认函数。
FRAMEWIN_Restore() 恢复最小化或最大化的框架窗口。
FRAMEWIN_SetActive() 设置框架窗口的状态。(弃用)
FRAMEWIN_SetBarColor() 设置标题栏的颜色。
FRAMEWIN_SetBorderSize() 设置框架窗口的边框尺寸。
FRAMEWIN_SetClientColor() 设置客户区的颜色。
FRAMEWIN_SetDefaultBarColor() 设置标题栏的默认颜色。
FRAMEWIN_SetDefaultBorderSize() 设置默认的边框尺寸。
FRAMEWIN_SetDefaultClientColor() 设置客户区的默认颜色。
FRAMEWIN_SetDefaultFont() 设置标题栏使用的默认字体。
FRAMEWIN_SetDefaultTextColor() 设置标题的默认文本颜色。
FRAMEWIN_SetDefaultTitleHeight() 设置标题栏的默认高度。
FRAMEWIN_SetFont() 选择标题文本所用的字体。
FRAMEWIN_SetMoveable() 将框架窗口设置为可移动/不可移动状态。
FRAMEWIN_SetOwnerDraw() 启用要自画的框架窗口。
FRAMEWIN_SetResizeable() 将框架窗口设置为可缩放状态。
FRAMEWIN_SetText() 设置标题文本。
FRAMEWIN_SetTextAlign() 设置标题文本的对齐方式。
FRAMEWIN_SetTextColor() 设置标题文本的颜色。
FRAMEWIN_SetTextColorEx() 设置标题文本的颜色。
FRAMEWIN_SetTitleHeight() 设置标题栏的高度。
FRAMEWIN_SetTitleVis() 设置标题栏的可见性标记。
FRAMEWIN_SetUserData() 设置 FRAMEWIN 小工具的额外数据

3. Rutina de demostración de control FRAMEWIN

#include "myframewin.h"
#include "GUI.h"
#include "FRAMEWIN.h"
#include "string.h"
#define SPEED 1200
#define MSG_CHANGE_MAIN_TEXT (WM_USER+0) (1)
static FRAMEWIN_Handle hFrame;
static WM_CALLBACK* _pcbOldFrame;
static char _acMainText[100];
static int LockClose=1;
//改变背景窗口中显示的字符
static void _ChangeMainText(char* pStr,int Delay) (2)
{
    
    
WM_MESSAGE Message;
Message.MsgId=MSG_CHANGE_MAIN_TEXT; (3)
Message.Data.p=pStr;
GUI_Delay(Delay);
WM_SendMessage(WM_HBKWIN,&Message); (4)
WM_InvalidateWindow(WM_HBKWIN);
GUI_Delay(Delay/3);
}
//子窗口回调函数
static void _cbChild(WM_MESSAGE *pMsg) (5)
{
    
    
WM_HWIN hWin=(FRAMEWIN_Handle)(pMsg->hWin);
switch(pMsg->MsgId)
{
    
    
case WM_PAINT:
GUI_SetBkColor(GUI_WHITE);
GUI_SetColor(GUI_BLACK);
GUI_SetFont(&GUI_FontComic24B_ASCII);
GUI_SetTextAlign(GUI_TA_HCENTER|GUI_TA_VCENTER);
GUI_Clear();
GUI_DispStringHCenterAt("Clientwindow",WM_GetWindowSizeX(hWin)/2,\
WM_GetWindowSizeY(hWin)/2);
break;
default:
WM_DefaultProc(pMsg);
} }
//FrameWin 控件回调函数
static void _cbFrame(WM_MESSAGE *pMsg) (6)
{
    
    
switch(pMsg->MsgId)
{
    
    
case WM_NOTIFY_PARENT:
if(pMsg->Data.v==WM_NOTIFICATION_RELEASED)
{
    
    
int Id=WM_GetId(pMsg->hWinSrc);
if(Id==GUI_ID_CLOSE) (7)
{
    
    
if(_LockClose) return; (8)
_hFrame = 0;` } }
break;
}
if(_pcbOldFrame) (*_pcbOldFrame)(pMsg);
}
//背景窗口 WM_HBKWIN 回调函数
static void _cbBkWindow(WM_MESSAGE* pMsg)
{
    
    
switch(pMsg->MsgId)
{
    
    
case MSG_CHANGE_MAIN_TEXT: (9)
strcpy(_acMainText,pMsg->Data.p); (10)
WM_InvalidateWindow(pMsg->hWin); (11)
break;
case WM_PAINT:
GUI_SetBkColor(GUI_BLACK);
GUI_Clear();
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font24_ASCII);
GUI_DispStringHCenterAt("WIDGET_FrameWin - Sample",160,5);
GUI_SetFont(&GUI_Font8x16);
GUI_DispStringHCenterAt(_acMainText,160,40); (12)
GUI_SetFont(&GUI_Font6x8);
GUI_DispStringHCenterAt("The function FRAMEWIN_Create creates both the\n"
 "frame window and the client window.", 160, 190);
break;
default:
WM_DefaultProc(pMsg);
} }
static void _DemoFramewin(void)
{
    
    
int i;
char acInfoText[]="-- sec to play with window";
WM_HWIN hChild;
//为背景设置回调函数
WM_SetCallback(WM_HBKWIN,_cbBkWindow);
//创建一个框架窗口
_ChangeMainText("FRAMEWIN_Create",SPEED);
_hFrame = FRAMEWIN_Create("Frame window",0,WM_CF_SHOW,30,60,260,125);
FRAMEWIN_SetTitleHeight(_hFrame,20);
FRAMEWIN_SetFont(_hFrame,&GUI_Font16B_ASCII);
//为框架窗口设置回调函数
_pcbOldFrame=WM_SetCallback(_hFrame,_cbFrame);
//获取子窗口的句柄
hChild=WM_GetClientWindow(_hFrame);
//设置子窗口的回调函数
WM_SetCallback(hChild,_cbChild);
//设置框架窗口为可移动的
FRAMEWIN_SetMoveable(_hFrame,1);
//给框架窗口创建几个按钮
FRAMEWIN_AddCloseButton(_hFrame,FRAMEWIN_BUTTON_RIGHT,0);
FRAMEWIN_AddMaxButton(_hFrame,FRAMEWIN_BUTTON_RIGHT,2);
FRAMEWIN_AddMinButton(_hFrame,FRAMEWIN_BUTTON_RIGHT,2);
//修改框架窗口的属性
_ChangeMainText("FRAMEWIN_SetActive",SPEED); (13)
FRAMEWIN_SetActive(_hFrame,1); (14)
_ChangeMainText("FRAMEWIN_SetFont",SPEED);
FRAMEWIN_SetFont(_hFrame,&GUI_Font24_ASCII); (15)
FRAMEWIN_SetTitleHeight(_hFrame,25); (16)
_ChangeMainText("FRAMEWIN_SetTextColor",SPEED);
FRAMEWIN_SetTextColor(_hFrame,GUI_YELLOW); (17)
_ChangeMainText("FRAMEWIN_SetTextAlign",SPEED);
FRAMEWIN_SetTextAlign(_hFrame,GUI_TA_HCENTER); (18)
_ChangeMainText("FRAMEWIN_Minimize",SPEED);
FRAMEWIN_Minimize(_hFrame); (19)
_ChangeMainText("FRAMEWIN_Maxmize",SPEED);
FRAMEWIN_Maximize(_hFrame); (20)
_ChangeMainText("FRAMEWIN_Restore",SPEED);
FRAMEWIN_Restore(_hFrame);
_ChangeMainText("FRAMEWIN_SetTitleVis",SPEED); (21)
for(i=0;i<5;i++)
{
    
    
FRAMEWIN_SetTitleVis(_hFrame,0); (22)
GUI_Delay(200);
FRAMEWIN_SetTitleVis(_hFrame,1); (23)
GUI_Delay(200);
}
_LockClose=0;
for(i=250;(i>0)&& _hFrame;i--) {
    
    
acInfoText[0]='0'+((i+9)/100);
acInfoText[1]='0'+(((i+9)/10)%10);
_ChangeMainText(acInfoText,0);
GUI_Delay(100);
}
if(_hFrame) (24) {
    
    
_ChangeMainText("FRAMEWIN_Delete",SPEED);
FRAMEWIN_Delete(_hFrame); (25)
}else
{
    
    
_ChangeMainText("",50);
} }
void FrameWin_Demo(void)
{
    
    
WM_EnableMemdev(WM_HBKWIN);
while(1)
{
    
    
_DemoFramewin();
} }

(1), MSG_CHANGE_MAIN_TEXT es un mensaje definido por el usuario, que se utiliza para cambiar la cadena que se mostrará.
(2) La función _ChangeMainText() es principalmente para formar el mensaje MSG_CHANGE_MAIN_TEXT y enviarlo
a la ventana de fondo WM_HBKWIN.
(3) El ID del mensaje es MSG_CHANGE_MAIN_TEXT, y la primera dirección del mensaje que se entrega se entrega a Data.p.
(4), envíe el mensaje MSG_CHANGE_MAIN_TEXT a la ventana de fondo WM_HBKWIN.
(5), la función de devolución de llamada de la subventana del control FrameWin.
(6), función de devolución de llamada de control FrameWin.
(7), hizo clic en el botón "Cerrar" de FrameWin.
(8), si FrameWin se ha cerrado, regrese directamente; de ​​lo contrario, establezca _hFrame en 0, marcando que el marco se ha cerrado.
(9) La ventana de fondo WM_HBKWIN recibe el mensaje MSG_CHANGE_MAIN_TEXT.
(10), copie la cadena que se mostrará en el mensaje MSG_CHANGE_MAIN_TEXT en la matriz _acMainText.
(11), invalide la ventana de destino, aquí está WM_HBKWIN.
(12), muestre las cadenas en la matriz _acMainText.
(13), llame a la función _ChangeMainText (), el propósito es mostrar la cadena especificada en la ventana de fondo.
(14), llama a la función FRAMEWIN_SetActive() para activar el frame_hFrame.
(15), llame a la función FRAMEWIN_SetFont() para establecer la fuente de _hFrame en GUI_Font24_ASCII.
(16), llame a la función FRAMEWIN_SetTitleHeight () para establecer la altura de la barra de título del marco en 25.
(17), llame a la función FRAMEWIN_SetTextColor() para establecer el color del texto del marco en GUI_YELLOW.
(18), llame a la función FRAMEWIN_SetTextAlign() para establecer la alineación del texto del marco.
(19), llame a la función FRAMEWIN_Minimize() para establecer la minimización de fotogramas.
(20), llame a la función FRAMEWIN_Maximize() para establecer el marco que se maximizará.
(21), llame a la función FRAMEWIN_Restore() para restaurar el tamaño y la posición originales.
(22), llame a la función FRAMEWIN_SetTitleVis() para que la barra de título del marco sea invisible.
(23), llame a la función FRAMEWIN_SetTitleVis() para configurar la barra de título del marco para que sea visible.
(24) Si _hFrame es 1, significa que no hay marco, luego elimine la ventana del marco aquí.
(25), llame a la función FRAMEWIN_Delete() para cerrar el marco.
inserte la descripción de la imagen aquí
Haga clic en los botones "Cerrar", "Maximizar" y "Minimizar" en el marco para ver cómo cambia el marco

Supongo que te gusta

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