STM32——EMWIN EDIT 控件(十八)

EMWIN

前言

EDIT 控件通常用来作为输入文本的主要用户界面,也可使用编辑字段以二进制、十进制或十六进制模式输入值。

一、 EDIT 控件简介

如下图
在这里插入图片描述

二、通知代码

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

WM_NOTIFICATION_CLICKED 已单击小工具。
WM_NOTIFICATION_RELEASED 已释放小工具。
WM_NOTIFICATION_MOVED_OUT已单击小工具,并且指针已移出小工具,但没有释放。
WM_NOTIFICATION_VALUE_CHANGED 编辑小工具的值(内容)已更改

三、键盘反应

如果小工具具有输入焦点,则它将对下列各键做出反应:

GUI_KEY_UP上升当前字符。例如,如果当前字符(光标下的字符)为“A”,则变为“B”
GUI_KEY_DOWN 下降当前字符。例如,如果当前字符为为“B”,则变为“A”
GUI_KEY_RIGHT 将光标向右移动一个字符。
GUI_KEY_LEFT 将光标向左移动一个字符。
GUI_KEY_BACKSPACE 如果小工具在文本模式下操作,则删除光标前的字符。
GUI_KEY_DELETE 如果小工具在文本模式下操作,则删除当前字符。
GUI_KEY_INSERT如果小工具在文本模式下操作,则此键在GUI_EDIT_MODE_OVERWRITE

四、 EDIT 控件 API 函数

EDIT_AddKey() 按键输入例程。
EDIT_Create() 创建 EDIT 小工具。
EDIT_CreateAsChild() 创建 EDIT 小工具,作为子窗口。
EDIT_CreateEx() 创建 EDIT 小工具。
EDIT_CreateIndirect() 从资源表项创建 EDIT 小工具。
EDIT_CreateUser() 使用额外字节作为用户数据创建 EDIT 小工具。
EDIT_EnaBleBlink() 启用/禁用闪烁光标
EDIT_GetCursorCharPos() 返回光标位置的字符编号。
EDIT_GetCursorPixelPos() 返回光标的像素位置。
EDIT_GetDefaultBkColor() 返回默认背景颜色。
EDIT_GetDefaultFont() 返回默认的字体。
EDIT_GetDefaultTextAlign() 返回默认的文本对齐方式。
EDIT_GetDefaultTextColor() 返回默认文本颜色。
EDIT_GetFloatValue() 按浮点值返回当前值。
EDIT_GetNumChars() 返回给定编辑小工具的字符数。
EDIT_GetText() 获取用户输入。
EDIT_GetUserData() 检索用 EDIT_SetUserData()设置的数据。
EDIT_GetValue() 返回当前值。
EDIT_SetBinMode() 启用二进制编辑模式。
EDIT_SetBkColor() 设置编辑字段的背景色。
EDIT_SetCursorAtChar() 将编辑小工具光标设置到指定的字符位置。
EDIT_SetCursorAtPixel() 将编辑小工具光标设置到指定的像素位置。
EDIT_SetDecMode() 启用十进制编辑模式。
EDIT_SetDefaultBkColor() 设置默认背景色。
EDIT_SetDefaultFont() 设置用于编辑字段的默认字体。
EDIT_SetDefaultTextAlign() 设置编辑字段的默认文本对齐方式。
EDIT_SetDefaultTextColor() 设置默认文本颜色。
EDIT_SetFloatMode() 启用浮点编辑模式。
EDIT_SetFloatValue() 设置使用浮点编辑模式时的浮点值。
EDIT_SetFont() 选择文本的字体。
EDIT_SetHexMode() 启用十六进制编辑模式。
EDIT_SetInsertMode() 启用或禁用插入模式。
EDIT_SetMaxLen() 设置编辑字段的最大字符数。
EDIT_SetpfAddKeyEx() 设置添加字符时要调用的函数。
EDIT_SetSel() 设置当前选定内容。
EDIT_SetText() 设置文本。
EDIT_SetTextAlign() 设置编辑字段的文本对齐方式。
EDIT_SetTextColor() 设置文本的颜色。
EDIT_SetTextMode() 将小工具的编辑模式设置回文本模式。
EDIT_SetValue() 设置当前值。
EDIT_SetUlongMode() 启用不带符号的长十进制编辑模式。
EDIT_SetUserData() 设置 EDIT 小工具的额外数据。
GUI_EditBin() 编辑当前光标位置处的二进制值。
GUI_EditDec() 编辑当前光标位置处的十进制值。
GUI_EditHex() 编辑当前光标位置处的十六进制值。
GUI_EditString() 编辑当前光标位置处的字符串。

五、EDIT 控件演示例程

#include "editwinmode.h"
#include "GUI.h"
#include "WM.h"
#include "DIALOG.h"


#define WM_APP_SHOW_TEXT	(WM_USER +0)
#define TEXT_MAXLEN	40

WM_HWIN DialoghWin;

//¶Ô»°¿ò×ÊÔ´±í
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = 
{
	{ FRAMEWIN_CreateIndirect, "Framewin", 0, 55, 90, 200, 110, FRAMEWIN_CF_MOVEABLE},
	{ EDIT_CreateIndirect, "Edit", GUI_ID_EDIT0, 24, 10, 145, 25, 0,15},
	{ BUTTON_CreateIndirect,"Ok", GUI_ID_OK,65,	50,	70,	30}
};

//±³¾°´°¿ÚµÄ»Øµ÷º¯Êý
static void _BkCallback(WM_MESSAGE *pMsg)
{
	static WM_HWIN hWin;
	static WM_HWIN hEdit;
	static U8 text;
	char   buffer[TEXT_MAXLEN];
	switch(pMsg->MsgId)
	{
		case WM_PAINT:
			GUI_SetBkColor(GUI_DARKGRAY);
			GUI_Clear();
			GUI_SetFont(&GUI_Font24_ASCII);
			GUI_DispStringHCenterAt("WIDGET_Edit - Sample", 160, 5);
			GUI_SetFont(&GUI_Font8x16);
			if (text) 
			{
				hEdit=WM_GetDialogItem(DialoghWin,GUI_ID_EDIT0);/*¶ÁȡС¹¤¾ßµÄÈÎÎñ¾ä±ú*/
				GUI_DispStringHCenterAt("The string you have modified is:", 160, 90);
				EDIT_GetText(hEdit, buffer, TEXT_MAXLEN);
				GUI_DispStringHCenterAt(buffer, 160, 110);
			} 
			else
			{	
				GUI_DispStringHCenterAt("Use keyboard to modify string...", 160, 90);
			}
			break;	
		case WM_APP_SHOW_TEXT:/*µ±Ïò EDIT ¿Ø¼þÊäÈëÍê³É²¢ÇÒµã»÷¶Ô»°¿òÖеġ°OK¡±
  °´Å¥ÒÔºó¾Í»áÏò±³¾°´°¿Ú WM_HBKWIN ·¢ËÍÏûÏ¢ WM_APP_SHOW_TEXT£¬*/
			hWin=pMsg->hWinSrc;
			WM_HideWindow(hWin);	//Òþ²Ø¶Ô»°¿ò
			text=1;
			WM_InvalidateWindow(WM_HBKWIN); //±³¾°´°¿ÚÎÞЧ
			WM_CreateTimer(WM_HBKWIN,0,3000,0);
			break;
		case WM_TIMER:
			text=0;
			WM_InvalidateWindow(WM_HBKWIN);
			WM_ShowWindow(hWin);
			break;
		default:
			WM_DefaultProc(pMsg);
			break;
	}	
}


//¶Ô»°¿ò»Øµ÷º¯Êý
static void _cbDialog(WM_MESSAGE * pMsg) 
{
	WM_HWIN hItem;
	int     NCode;
	int     Id;
	WM_MESSAGE Msg;

	switch (pMsg->MsgId) 
	{
		case WM_INIT_DIALOG:/*´´½¨¶Ô»°¿òºóÁ¢¼´·¢Ë͵½¶Ô»°¿ò´°¿Ú*/
			//³õʼ»¯FRAMEWIN
			hItem = pMsg->hWin;
			FRAMEWIN_SetText(hItem, "EDIT USER");
			FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
			FRAMEWIN_SetFont(hItem, GUI_FONT_16B_ASCII);
			//³õʼ»¯EDIT
			hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_EDIT0);
			EDIT_EnableBlink(hItem, 500, 1);/*ÆôÓÃ/½ûÓÃÉÁ˸¹â±ê*/
			EDIT_SetText(hItem, "qichenxi");
			EDIT_SetFont(hItem, &GUI_Font20_ASCII);
			EDIT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
		
			break;
		case WM_NOTIFY_PARENT:/*¸æÖª¸¸´°¿Ú£¬Æä×Ó´°¿ÚÖз¢ÉúÁËijЩ¸Ä±ä*/
			Id    = WM_GetId(pMsg->hWinSrc);
			NCode = pMsg->Data.v;
			switch(Id) 
			{
				case GUI_ID_EDIT0:	//EDIT¿Ø¼þ֪ͨÏûÏ¢
					switch(NCode) 
					{
						case WM_NOTIFICATION_CLICKED:
							break;
						case WM_NOTIFICATION_RELEASED:
							break;
						case WM_NOTIFICATION_VALUE_CHANGED:
							break;
					}
					break;
				case GUI_ID_OK:
					switch(NCode)
					{
						case WM_NOTIFICATION_CLICKED:
							break;						
						case WM_NOTIFICATION_RELEASED:
							Msg.MsgId=WM_APP_SHOW_TEXT;
							Msg.hWinSrc=pMsg->hWin;
							WM_SendMessage(WM_HBKWIN,&Msg);/*Ïò´°¿Ú·¢ËÍÏûÏ¢¡£*/
							break;		
					}		
			}
			break;
	default:
		WM_DefaultProc(pMsg);
		break;
	}
}

void Editwinmode_Demo(void) 
{
	WM_SetCallback(WM_HBKWIN,_BkCallback);
	DialoghWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
	while(1)
	{
		GUI_Delay(10);
	}
}

在这里插入图片描述
这里我们没有做输入法,所以没办法在开发板上输入字符串,大家自行将本例程可以移植到模拟器中,在 PC 上模拟,通过键盘输入字符串,然后点击 OK 键,那么刚刚输入的字符串就会显示在背景窗口中
在这里插入图片描述

总结

仔细看一下代码和函数还是可以看懂的。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32F4是一款高性能的单片机系列,它内置了强大的ARM Cortex-M4内核,具有丰富的外设和高速的处理能力,非常适合用于开发各种嵌入式应用。 emWin是一款专业的嵌入式图形库,它可以在STM32F4上运行,提供了丰富的图形显示和用户界面功能。通过使用emWin,我们可以轻松地实现各种图形界面设计,包括示波器的功能。 示波器是一种常用的测试设备,用于显示电压信号的变化情况。在STM32F4上使用emWin图形库,可以实现一个简单的示波器应用程序。首先,我们可以通过ADC模块获取外部信号的电压值。然后,使用emWin中的绘图函数将这些电压值显示在屏幕上,形成波形图。同时,我们还可以使用触摸屏或按键等输入设备,实现一些调整功能,比如改变波形的时间尺度或幅度,以及选择不同的输入通道等。此外,我们还可以添加触发功能,使波形在特定条件下触发显示,以便更好地观察信号。 要实现STM32F4上的emWin示波器,首先需要了解STM32F4的硬件架构和外设功能。然后,使用STM32CubeMX工具进行初始化设置,并在开发环境中编写相应的代码。在编写代码时,我们需要使用emWin提供的绘图函数和用户界面库函数,来实现波形的绘制和交互功能。 总之,使用STM32F4和emWin图形库,我们可以很方便地实现一个功能强大的示波器应用程序。这个示波器可以用于各种测试和测量应用,是嵌入式系统开发中非常有用的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我与nano

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值