要讓文本控件實時顯示變化的數,不能直接賦值,否則會死機,需要將變量轉換成字符串再發送給文本控件,步驟很簡單。
功能:兩個按鍵實現文本控件的數字加減變化。
第一步:定義全局變量(不能定義局部變量,因為窗口重繪時候會將變量初始化)
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);
}
}
//附圖

|