EMWIN
文章目录
- EMWIN
- 前言
- 一、 EDIT 控件简介
- 二、通知代码
- 三、键盘反应
- 四、 EDIT 控件 API 函数
- 五、EDIT 控件演示例程
- 总结
前言
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 40WM_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:/*???¨???°?ò?ó????·????????°?ò?°??*///??????FRAMEWINhItem = pMsg->hWin;FRAMEWIN_SetText(hItem, "EDIT USER");FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);FRAMEWIN_SetFont(hItem, GUI_FONT_16B_ASCII);//??????EDIThItem = 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:/*???????°??????×??°????·??ú????????±?*/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 键,那么刚刚输入的字符串就会显示在背景窗口中
总结
仔细看一下代码和函数还是可以看懂的。