向领导请教问题怎么写硬汉一个多对话框问题

【STemWin教程入门篇】第43章&EDIT-编辑控件
特别说明:完整STemWin的1-60期教程和配套实例下载地址:
EDIT-编辑控件
本期教程讲解STemWin支持的编辑控件。
43.&1&编辑控件介绍
43.&2&官方WIDGET_Edit实例
43.&3&对话框上使用编辑框控件
43.&4&总结
编辑控件介绍
编辑字段通常用作输入文本的主要用户界面:
也可使用编辑字段以二进制、十进制或十六进制模式输入值。十进制模式编辑字段的外观与下表所列
类似。与复选框类似,编辑字段在禁用时显示为灰色:
开启皮肤设置后,编辑框的显示效果如下:
43.1.1&编辑框支持的通知代码
以下事件是编辑框控件作为WM_NOTIFY_PARENT消息的一部分发送给其父窗口的:
WM_NOTIFICATION_CLICKED
已被点击。
WM_NOTIFICATION_RELEASED
已被释放。
WM_NOTIFICATION_MOVED_OUT
已被点击,且指针已移出控件,但没有释放。
WM_NOTIFICATION_VALUE_CHANGED
编辑小工具的值&(内容)已更改。
43.1.2&编辑框支持的键盘反应
如果控件具有输入焦点,则它将对下列各键做出反应:
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
和GUI_EDIT_MODE_INSERT之间切换编辑模式。
官方WIDGET_Edit实例
官方的这个例子演示了部分EDIT控件API的使用。这个例子在模拟器中的位置:
源代码如下(官方的这个例子有BUG,下面是修改前的,也就是源代码):
#include&"GUI.h"
#include&"EDIT.h"
#define&WM_APP_SHOW_TEXT&(WM_USER&+&0)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&(1)
#define&TEXT_MAXLEN&&&&&&40&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&(2)
static&void&_cbBk(WM_MESSAGE&*&pMsg)&{
&&static&WM_HWIN&hE
&&static&U8&&&&&&ShowT
&&char&&&&&&&&&&&aBuffer[TEXT_MAXLEN];
&&hEdit&&&&=&0;
&&ShowText&=&0;
&&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&(ShowText)&{
&&&&&&GUI_DispStringHCenterAt("The&string&you&have&modified&is:",&160,&90);
&&&&&&EDIT_GetText(hEdit,&aBuffer,&TEXT_MAXLEN);
&&&&&&GUI_DispStringHCenterAt(aBuffer,&160,&110);
&&&&}&else&{
&&&&&&GUI_DispStringHCenterAt("Use&keyboard&to&modify&string...",&160,&90);
&&case&WM_APP_SHOW_TEXT:
&&&&if&(hEdit&==&0)&{
&&&&&&hEdit&=&pMsg-&hWinS
&&&&WM_HideWindow(hEdit);
&&&&ShowText&=&1;
&&&&WM_InvalidateWindow(WM_HBKWIN);
&&&&WM_CreateTimer(WM_HBKWIN,&0,&3000,&0);
&&case&WM_TIMER:
&&&&ShowText&=&0;
&&&&WM_InvalidateWindow(WM_HBKWIN);
&&&&WM_ShowWindow(hEdit);
&&default:
&&&&WM_DefaultProc(pMsg);
static&void&_cbEdit(WM_MESSAGE&*&pMsg)&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&(3)
&&const&WM_KEY_INFO&*&pI
&&WM_MESSAGE&&&&&&&&&&M
&&switch&(pMsg-&MsgId)&{
&&case&WM_KEY:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&(4)
&&&&pInfo&=&(WM_KEY_INFO&*)pMsg-&Data.p;
&&&&if&(pInfo-&Key&==&GUI_KEY_ENTER)&{
&&&&&&if&(pInfo-&PressedCnt&==&0)&{
&&&&&&&&Msg.MsgId&&&=&WM_APP_SHOW_TEXT;
&&&&&&&&Msg.hWinSrc&=&pMsg-&hW
&&&&&&&&WM_SendMessage(WM_HBKWIN,&&Msg);
&&EDIT_Callback(pMsg);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&(5)
void&MainTask(void)&{
&&EDIT_Handle&hE
&&GUI_Init();
&&WM_SetCallback(WM_HBKWIN,&_cbBk);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&(6)
&&hEdit&=&EDIT_CreateEx(50,&110,&220,&25,&WM_HBKWIN,&WM_CF_SHOW,&0,&GUI_ID_EDIT0,&TEXT_MAXLEN);&&&&&&&(7)
&&WM_SetCallback(hEdit,&_cbEdit);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&(8)
&&EDIT_SetText(hEdit,&"Press&&when&done...");
&&EDIT_SetFont(hEdit,&&GUI_Font8x16);
&&EDIT_SetTextColor(hEdit,&0,&GUI_RED);
&&EDIT_EnableBlink(hEdit,&300,&1);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&(9)
&&while&(1)&{
&&&&GUI_Delay(10);
这个实例中函数static&void&_cbBk(WM_MESSAGE&*&pMsg)存在问题,需要做如下修改:
static&void&_cbBk(WM_MESSAGE&*&pMsg)&{
&&static&WM_HWIN&hEdit&=&0;(10)
&&static&U8&&&&&&ShowText&=&0;
&&char&&&&&&&&&&&aBuffer[TEXT_MAXLEN];
&&//hEdit&&&&=&0;
&&//ShowText&=&0;
&&switch&(pMsg-&MsgId)&{
&&case&WM_PAINT:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&(11)
&&&&GUI_SetBkColor(GUI_DARKGRAY);
&&&&GUI_Clear();
&&&&GUI_SetFont(&GUI_Font24_ASCII);
&&&&GUI_DispStringHCenterAt("WIDGET_Edit&-&Sample",&160,&5);
&&&&GUI_SetFont(&GUI_Font8x16);
&&&&if&(ShowText)&{
&&&&&&GUI_DispStringHCenterAt("The&string&you&have&modified&is:",&160,&90);
&&&&&&EDIT_GetText(hEdit,&aBuffer,&TEXT_MAXLEN);
&&&&&&GUI_DispStringHCenterAt(aBuffer,&160,&110);
&&&&}&else&{
&&&&&&GUI_DispStringHCenterAt("Use&keyboard&to&modify&string...",&160,&90);
&&case&WM_APP_SHOW_TEXT:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&(12)
&&&&if&(hEdit&==&0)&{
&&&&&&hEdit&=&pMsg-&hWinS
&&&&WM_HideWindow(hEdit);
&&&&ShowText&=&1;
&&&&WM_InvalidateWindow(WM_HBKWIN);
&&&&WM_CreateTimer(WM_HBKWIN,&0,&3000,&0);
&&case&WM_TIMER:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&(13)
&&&&ShowText&=&0;
&&&&WM_InvalidateWindow(WM_HBKWIN);
&&&&WM_ShowWindow(hEdit);
&&default:
&&&&WM_DefaultProc(pMsg);
1.&自定义回调函数的消息。
2.&定义编辑框中可以显示字符的个数。
3.&编辑框的回调函数,默认情况下,编辑框的回调函数是在emWin库函数中自带执行的,不需要用户专门的做一个回调函数,如果用户需要在编辑框的回调函数中加入处理代码的话,可以通过函数WM_SetCallback来指定编辑框的回调函数。
4.&编辑框回调函数中的WM_KEY消息。如果用户在键盘上按下Enter回车键,那么就会给桌面窗口发送前面自定义的消息。
5.&emWin库中自带的编辑框回调函数EDIT_Callback(pMsg);
6.&设置桌面窗口的回调函数。
7.&创建编辑框。
8.&设置编辑框的回调函数。
9.&这个函数用于使能或者禁止光标闪烁。
10.&这个函数是桌面窗口的回调函数,由于官方的提供的这个函数是存在问题的,这里专门的做了修改,注意红体字。
11.&桌面窗口的WM_PAINT消息。根据ShowText变量来改变不同的显示值。
12.&桌面窗口中自定义的消息,如果收到这个消息后,隐藏编辑框,设置ShowText&=&1,然后将桌面窗口设置为无效,从而会执行桌面窗口的WM_PAINT消息,最后给桌面窗口建立一个定时器,时间是3000ms。
13.&定时器消息,3000ms的时间到了以后设置ShowText&=&1,将桌面窗口无效,从而执行重绘消息,并将编辑框显示出来。
实际显示效果如下:
对话框上使用编辑框控件
用uCGUIBulder4.0建立一个如下的界面(分辨率480*272):
通过这个例子主要是显示一下编辑框支持的五种显示方式,设置的位置如下:
源代码如下(可以直接复制到模拟器或者开发板上面显示):
#include&"GUI.h"
#include&"DIALOG.h"
#include&"WM.h"
#include&"BUTTON.h"
#include&"CHECKBOX.h"
#include&"DROPDOWN.h"
#include&"EDIT.h"
#include&"FRAMEWIN.h"
#include&"LISTBOX.h"
#include&"MULTIEDIT.h"
#include&"RADIO.h"
#include&"SLIDER.h"
#include&"TEXT.h"
#include&"PROGBAR.h"
#include&"SCROLLBAR.h"
#include&"LISTVIEW.h"
static&const&GUI_WIDGET_CREATE_INFO&_aDialogCreate[]&=&{
&&&&{&FRAMEWIN_CreateIndirect,&&"armfly",&&&&&&&&&&&&0,&&&&&&&&&&&&&&&&&&&&&&&0,&&0,&&480,272,FRAMEWIN_CF_MOVEABLE,0},
&&&&{&EDIT_CreateIndirect,&&&&&&"armfly",&&&&&&&&&&&&GUI_ID_EDIT0,&&&&&&&&&&&&239,36,&100,21,&0,0},
&&&&{&TEXT_CreateIndirect,&&&&&&"TextMode",&&&&&&&&&&GUI_ID_TEXT0,&&&&&&&&&&&&81,&36,&106,24,&0,0},
&&&&{&TEXT_CreateIndirect,&&&&&&"FloatMode",&&&&&&&&&GUI_ID_TEXT4,&&&&&&&&&&&&81,&199,118,24,&0,0},
&&&&{&TEXT_CreateIndirect,&&&&&&"DecMode",&&&&&&&&&&&GUI_ID_TEXT3,&&&&&&&&&&&&81,&158,94,&24,&0,0},
&&&&{&TEXT_CreateIndirect,&&&&&&"BinMode",&&&&&&&&&&&GUI_ID_TEXT2,&&&&&&&&&&&&81,&117,94,&24,&0,0},
&&&&{&TEXT_CreateIndirect,&&&&&&"HexMode",&&&&&&&&&&&GUI_ID_TEXT1,&&&&&&&&&&&&81,&73,&94,&24,&0,0},
&&&&{&EDIT_CreateIndirect,&&&&&&"FFFF",&&&&&&&&&&&&&&GUI_ID_EDIT1,&&&&&&&&&&&&239,73,&100,21,&0,0},
&&&&{&EDIT_CreateIndirect,&&&&&&"",&&&&&&&&&&GUI_ID_EDIT2,&&&&&&&&&&&&239,120,100,21,&0,0},
&&&&{&EDIT_CreateIndirect,&&&&&&"128",&&&&&&&&&&&&&&&GUI_ID_EDIT3,&&&&&&&&&&&&239,163,100,21,&0,0},
&&&&{&EDIT_CreateIndirect,&&&&&&"12.123456",&&&&&&&&&GUI_ID_EDIT4,&&&&&&&&&&&&239,199,100,21,&0,0}
void&PaintDialog(WM_MESSAGE&*&pMsg)
&&&&WM_HWIN&hWin&=&pMsg-&hW
void&InitDialog(WM_MESSAGE&*&pMsg)
&&&&WM_HWIN&hWin&=&pMsg-&hW
&&&&//FRAMEWIN
&&&&FRAMEWIN_SetFont(hWin,&GUI_Font32B_ASCII);
&&&&FRAMEWIN_AddCloseButton(hWin,&FRAMEWIN_BUTTON_RIGHT,&0);
&&&&FRAMEWIN_AddMaxButton(hWin,&FRAMEWIN_BUTTON_RIGHT,&1);
&&&&FRAMEWIN_AddMinButton(hWin,&FRAMEWIN_BUTTON_RIGHT,&2);
&&&&FRAMEWIN_SetTitleHeight(hWin,35);
&&&&//GUI_ID_EDIT0
&&&&EDIT_SetFont(WM_GetDialogItem(hWin,GUI_ID_EDIT0),&GUI_Font16B_ASCII);
&&&&EDIT_SetText(WM_GetDialogItem(hWin,GUI_ID_EDIT0),"armfly");
&&&&//GUI_ID_TEXT0
&&&&TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT0),&GUI_Font24B_ASCII);
&&&&//GUI_ID_TEXT4
&&&&TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT4),&GUI_Font24B_ASCII);
&&&&//GUI_ID_TEXT3
&&&&TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT3),&GUI_Font24B_ASCII);
&&&&//GUI_ID_TEXT2
&&&&TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT2),&GUI_Font24B_ASCII);
&&&&//GUI_ID_TEXT1
&&&&TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT1),&GUI_Font24B_ASCII);
&&&&//GUI_ID_EDIT1
&&&&EDIT_SetFont(WM_GetDialogItem(hWin,GUI_ID_EDIT1),&GUI_Font16B_ASCII);
&&&&EDIT_SetHexMode(WM_GetDialogItem(hWin,GUI_ID_EDIT1),);(1)
&&&&//GUI_ID_EDIT2
&&&&EDIT_SetFont(WM_GetDialogItem(hWin,GUI_ID_EDIT2),&GUI_Font16B_ASCII);
&&&&EDIT_SetBinMode(WM_GetDialogItem(hWin,GUI_ID_EDIT2),240,0,255);(2)
&&&&//GUI_ID_EDIT3
&&&&EDIT_SetFont(WM_GetDialogItem(hWin,GUI_ID_EDIT3),&GUI_Font16B_ASCII);
&&&&EDIT_SetDecMode(WM_GetDialogItem(hWin,GUI_ID_EDIT3),128,0,255,0,0);&&(3)
&&&&//GUI_ID_EDIT4
&&&&EDIT_SetFont(WM_GetDialogItem(hWin,GUI_ID_EDIT4),&GUI_Font16B_ASCII);
&&&&EDIT_SetFloatMode(WM_GetDialogItem(hWin,GUI_ID_EDIT4),12.,6,0);&&&(4)
static&void&_cbCallback(WM_MESSAGE&*&pMsg)&
&&&&int&NCode,&Id;
&&&&WM_HWIN&hWin&=&pMsg-&hW
&&&&switch&(pMsg-&MsgId)&
&&&&&&&&case&WM_PAINT:
&&&&&&&&&&&&PaintDialog(pMsg);
&&&&&&&&&&&&
&&&&&&&&case&WM_INIT_DIALOG:
&&&&&&&&&&&&InitDialog(pMsg);
&&&&&&&&&&&&
&&&&&&&&case&WM_KEY:
&&&&&&&&&&&&switch&(((WM_KEY_INFO*)(pMsg-&Data.p))-&Key)&
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&case&GUI_KEY_ESCAPE:
&&&&&&&&&&&&&&&&&&&&GUI_EndDialog(hWin,&1);
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&case&GUI_KEY_ENTER:
&&&&&&&&&&&&&&&&&&&&GUI_EndDialog(hWin,&0);
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&}
&&&&&&&&&&&&
&&&&&&&&case&WM_NOTIFY_PARENT:
&&&&&&&&&&&&Id&=&WM_GetId(pMsg-&hWinSrc);&
&&&&&&&&&&&&NCode&=&pMsg-&Data.v;&&&&&&&&
&&&&&&&&&&&&switch&(Id)&
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&case&GUI_ID_OK:
&&&&&&&&&&&&&&&&&&&&if(NCode==WM_NOTIFICATION_RELEASED)
&&&&&&&&&&&&&&&&&&&&&&&&GUI_EndDialog(hWin,&0);
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&case&GUI_ID_CANCEL:
&&&&&&&&&&&&&&&&&&&&if(NCode==WM_NOTIFICATION_RELEASED)
&&&&&&&&&&&&&&&&&&&&&&&&GUI_EndDialog(hWin,&0);
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&}
&&&&&&&&&&&&
&&&&&&&&default:
&&&&&&&&&&&&WM_DefaultProc(pMsg);
void&MainTask(void)&
&&&&GUI_Init();
&&&&WM_SetDesktopColor(GUI_WHITE);&&&&&&
&&&&WM_SetCreateFlags(WM_CF_MEMDEV);&&
PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
&&&&GUI_ExecDialogBox(_aDialogCreate,&GUI_COUNTOF(_aDialogCreate),&&_cbCallback,&0,&0,&0);
1.&设置16进制显示。
2.&设置2进制显示。
3.&设置10进制显示。
4.&设置浮点数显示。
实际的显示效果如下:
本期教程主要是跟大家讲解了编辑框的使用,希望大家可以把本期教程中讲的这两个例子跑跑,然后自己设计一个相关的例子进行试验学习。教程中只是使用了部分的编辑框API,其它的API大家都可以试试。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 向领导请教问题怎么写 的文章

 

随机推荐