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 键,那么刚刚输入的字符串就会显示在背景窗口中
在这里插入图片描述

总结

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

猜你喜欢

转载自blog.csdn.net/qq_51963216/article/details/124069868
今日推荐