要让文本控件实时显示变化的数,不能直接赋值,否则会死机,需要将变量转换成字符串再发送给文本控件,步骤很简单。
功能:两个按键实现文本控件的数字加减变化。
第一步:定义全局变量(不能定义局部变量,因为窗口重绘时候会将变量初始化)
char buf[2];
int i=0;
第二步:在static void _cbDialog(WM_MESSAGE * pMsg)函数里里面定义WM_HWIN hWin = pMsg->hWin;
第三步:在按键里面添加自己的代码(我采用按键按下执行变量加或者减一):
(其实就是将变量存入数组中,将变量转换成字符串,然后赋给TEXT_SetText
i++;if(i>59) i=0;
sprintf(buf, "%2d", i);
TEXT_SetText(WM_GetDialogItem(hWin,ID_TEXT_0), buf);
界面用 GUI_Builder建立,添加两个按钮和一个文本框TEXT,然后导入到代码工程里,
在main.c中申明一下函数void ButtonUse_Demo(void);
然后在任务里运行ButtonUse_Demo(); 即可。(我用UCOSII系统)
感谢ALIENTEK技术交流群的网友 神散形不散tnx@139.com(673882715) 的大力帮助,在此特地发表此文章,帮组初学EMWIN系统的孩子们能快速进入实战,省去自己摸索的时间。
//实例代码
#include "DIALOG.h"
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x04)
#define ID_BUTTON_0 (GUI_ID_USER + 0x05)
#define ID_BUTTON_1 (GUI_ID_USER + 0x06)
#define ID_TEXT_0 (GUI_ID_USER + 0x07)
char buf[2];
int i=0;
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 4, 18, 216, 239, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 117, 127, 70, 90, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_1, 11, 127, 70, 90, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_0, 63, 11, 121, 89, 0, 0x64, 0 },
};
static void _cbDialog(WM_MESSAGE * pMsg)
{
WM_HWIN hItem;
int NCode;
int Id;
WM_HWIN hWin = pMsg->hWin;
switch (pMsg->MsgId)
{
case WM_INIT_DIALOG:
// Initialization of 'Button'
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
BUTTON_SetText(hItem, "+");
BUTTON_SetFont(hItem, GUI_FONT_D48X64);
// Initialization of 'Button'
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
BUTTON_SetText(hItem, "-");
BUTTON_SetFont(hItem, GUI_FONT_D48X64);
// Initialization of 'Text'
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
TEXT_SetText(hItem, " 0");
TEXT_SetFont(hItem, GUI_FONT_D60X80);
TEXT_SetTextColor(hItem, 0x000000FF);
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id)
{
case ID_BUTTON_0: // Notifications sent by 'Button'
switch(NCode)
{
case WM_NOTIFICATION_CLICKED:
i++;
if(i>59) i=0;
sprintf(buf, "%2d", i);
TEXT_SetText(WM_GetDialogItem(hWin,ID_TEXT_0), buf);
break;
case WM_NOTIFICATION_RELEASED:
break;
}
break;
case ID_BUTTON_1: // Notifications sent by 'Button'
switch(NCode)
{
case WM_NOTIFICATION_CLICKED:
i--;
if(i<0) i=59;
sprintf(buf, "%2d", i);
TEXT_SetText(WM_GetDialogItem(hWin,ID_TEXT_0), buf);
break;
case WM_NOTIFICATION_RELEASED:
break;
}
break;
}
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
//创建一个对话框
WM_HWIN CreateFramewin(void)
{
WM_HWIN hWin;
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
return hWin;
}
//BUTTO演示函数
void ButtonUse_Demo(void)
{
WM_HWIN hWin;
hWin=CreateFramewin();
while(1)
{
GUI_Delay(100);
}
}
//附图

|