硬汉嵌入式论坛

 找回密码
 立即注册
查看: 493|回复: 2
收起左侧

[技术讨论] 关于EMWIN中BUTTON显示的问题

[复制链接]

2

主题

0

回帖

6

积分

新手上路

积分
6
发表于 2024-11-29 14:37:39 | 显示全部楼层 |阅读模式
本帖最后由 yaowang_hao 于 2024-11-29 14:50 编辑

我用的STM32F407开发板,学习BUTTON控件,用FrameWin 控件可以实现BUTTON显示,但是按照安富莱示波器例程中直接设置BUTTON方法来写程序就显示不出BUTTON,希望大神们给看看哪里有问题。源码如下:

/******************************************************************************* * 函数 ******************************************************************************/
/***********************************************************************       Defines************************************************************************/
#define WM_HBKWIN      WM_GetDesktopWindow()               
/* Handle of background window */
/***********************************************************************       Static data************************************************************************/
/*数据对象句柄*/GRAPH_DATA_Handle Graphdata;
/* 3个按钮句柄 */
BUTTON_Handle hButton0;
BUTTON_Handle hButton1;
BUTTON_Handle hButton2;
/*************变量定义******************/
uint8_t hWinRunStopFlag = 1;   /* 1:表示运行,0:表示暂停 */
uint16_t  g_usRefPos = 20;    /* 左侧的参考位置,默认开机后是中间位置 */
/* 用于函数GUI_MEMDEV_Draw的调用 */
typedef struct {        uint16_t *aY;} PARAM;/* 波形显示区左侧边上波形显示的参考位置 */
const GUI_POINT aPoints[5] = {        {  0, -10},        { 22, -10},        { 32,   0},        { 22,  10},        { 0,   10}};
/* 声明一个矩形方框 */GUI_RECT Rect ={DSOSCREEN_STARTX, DSOSCREEN_STARTY, DSOSCREEN_ENDX, DSOSCREEN_ENDY};
/**********调用外部变量****************/
extern __IO uint16_t ADC_ConvertedValue;
/***********************************************************************       Static data************************************************************************/
extern const char Framewin_text[];extern const char text1[];extern const char text2[];
#define ID_BUTTON_0   (GUI_ID_USER + 0x01)
#define ID_BUTTON_1   (GUI_ID_USER + 0x02)
#define ID_BUTTON_2   (GUI_ID_USER + 0x03)
/**************GUI_RECT类型数组********************/
GUI_RECT lClient    = {0,   0,  479, 39};     /* 用于显示波形纵轴坐标代表什么 */
GUI_RECT StateMode  = {370,  0, 470, 39};     /* 用于显示运行状态,运行和暂停 */
GUI_RECT lRefPos    = {0,  40, 39, 339};     /* 最左侧波形纵轴参考的位置区域 */
GUI_RECT RunMode    = {370,  44, 470, 94};     /* 最右侧波形纵轴参考的位置区域 */
GUI_RECT StopMode   = {370,  124, 470, 174};
GUI_RECT SaveMode   = {370,  204, 470, 254};
void DRAW_init(void){     
   uint16_t x;        uint16_t y;        /* 第1步:刷新背景*********************************************************************/        
GUI_SetBkColor(GUI_WHITE);         
GUI_Clear();               
/* 第2步:显示基本的信息***************************************************************/   
GUI_SetColor(GUI_BLACK);   
GUI_SetFont(&GUI_Font8x16x1x2);      
GUI_DispStringInRect("(p)", &lClient, GUI_TA_HCENTER | GUI_TA_VCENTER);                 
/*3 :设置波形显示运行或暂停 */      
  if(hWinRunStopFlag == 1)      
{               
GUI_SetColor(GUI_GREEN);            
GUI_DispStringInRect("Run", &StateMode, GUI_TA_HCENTER | GUI_TA_VCENTER);        
}      
else   
     {               
GUI_SetColor(GUI_RED);
GUI_DispStringInRect("Stop", &StateMode, GUI_TA_HCENTER | GUI_TA_VCENTER);      
}   
/* 第4步:波形显示区的边框*************************************************************/   
  GUI_SetColor(0XEBCD9E);        
GUI_DrawRect(DSOSCREEN_STARTX - 1,   /* Upper left X-position. */                             
DSOSCREEN_STARTY - 1,  /* Upper left Y-position. */                     
DSOSCREEN_ENDX + 1,    /* Lower right X-position. */                     
DSOSCREEN_ENDY + 1);   /* Lower right Y-position. */        
GUI_SetColor(0XB37F63);        
GUI_DrawRect(DSOSCREEN_STARTX - 2,   /* Upper left X-position. */                              
DSOSCREEN_STARTY - 2,  /* Upper left Y-position. */                     
DSOSCREEN_ENDX + 2,    /* Lower right X-position. */                     
DSOSCREEN_ENDY + 2);   /* Lower right Y-position. */               
/*******绘制虚线背景********************************/      
GUI_SetBkColor(GUI_BLACK);      
GUI_ClearRect(DSOSCREEN_STARTX,  /* Upper left X-position. */                              
DSOSCREEN_STARTY,  /* Upper left Y-position. */                     
DSOSCREEN_ENDX,    /* Lower right X-position. */                     
DSOSCREEN_ENDY);   /* Lower right Y-position. */      
//        GUI_SetColor(GUI_WHITE);               
/* 绘制水平刻度点 */      
for (y = 0; y < 6; y++)                                                                       
{               
for (x = 0; x < 36; x++)               
{                       
GUI_DrawPoint(DSOSCREEN_STARTX + (x * 10), DSOSCREEN_STARTY + (y * 50));               
}        
}               
for (x = 0; x < 36; x++)        
{               
GUI_DrawPoint(DSOSCREEN_STARTX + (x * 10), DSOSCREEN_ENDY);      
}                       
/* 绘制垂直刻度点 */
  for (x = 0; x < 5; x++)                                                               
{               
for (y = 0; y < 30; y++)               
{                       
GUI_DrawPoint(DSOSCREEN_STARTX + (x * 90), DSOSCREEN_STARTY + (y * 10));               
}      
}   
/* 第5步:创建需要的按钮*************************************************************/      
hButton0 = BUTTON_Create(370,  44, 100, 50, GUI_ID_BUTTON0, WM_CF_SHOW);        
BUTTON_SetText(hButton0, "RUN");        
BUTTON_SetFont(hButton0, &GUI_Font20B_ASCII);      
hButton1 = BUTTON_Create(370,  124, 100, 50, GUI_ID_BUTTON1, WM_CF_SHOW);        
BUTTON_SetText(hButton1, "STOP");        
BUTTON_SetFont(hButton1, &GUI_Font20B_ASCII);      
hButton2 = BUTTON_Create(370,  204, 100, 50, GUI_ID_BUTTON2, WM_CF_SHOW);        
BUTTON_SetText(hButton2, "SAVE");        BUTTON_SetFont(hButton2, &GUI_Font20B_ASCII);        
/* 第6步:显示参考坐标*************************************************************/      
GUI_SetColor(GUI_YELLOW);        
GUI_FillPolygon(&aPoints[0], GUI_COUNTOF(aPoints), 5, g_usRefPos);               
GUI_SetColor(GUI_BLACK);    GUI_SetFont(&GUI_Font24_ASCII);      
GUI_SetTextMode(GUI_TEXTMODE_TRANS);                                                
GUI_DispCharAt('1', 10, g_usRefPos - 10);}
/**  * @brief 对话框回调函数  * @note 无  * @param pMsg:消息指针  * @retval 无  */
static void _cbBkWin(WM_MESSAGE* pMsg)
{         
WM_HWIN hWin;   
int NCode, Id;   
hWin = pMsg->hWin;         
switch (pMsg->MsgId)                  
{                                       
/* 桌面背景重绘 */
   case WM_PAINT:                                                        
DRAW_init();                                       
break;                                                                              
case WM_TIMER:                                       
break;                                                      
case WM_INIT_DIALOG:                                                                                          
break;                                                                              
case WM_NOTIFY_PARENT:                                                        
Id = WM_GetId(pMsg->hWinSrc);                                                         
NCode = pMsg->Data.v;                                             
switch (Id)                                 
{                                                                       
/* 按钮0:界面运行 */                                                                        
case GUI_ID_BUTTON0:                                                                                                                       
switch(NCode)                                                                                                                       
{                                                                                                                                       
case WM_NOTIFICATION_RELEASED:                                                                                                                                                        
hWinRunStopFlag = 1;                                                                                                                                                        
break;                                                                                                                       
}                                                                              
break;                                                                                                                                                        
/* 按钮1:打开Inspector对话框 */                                                                        
case GUI_ID_BUTTON1:                                                                                                                        
switch(NCode)                                                                                                                       
{                                                                                                                                       
case WM_NOTIFICATION_RELEASED:                                                                                                                                                      
hWinRunStopFlag = 0;                                                                                                                                                      
break;                                                                                                                        
}                                                                                
break;                                                                                                                                               
/* 按钮2:打开Acquire对话框 */                                                                        
case GUI_ID_BUTTON2:                                                                                                                        
switch(NCode)                                                                                                                        
{                                                                                                                                       
case WM_NOTIFICATION_RELEASED:                                                                                                                                                        
                                                                                                                                                   
break;                                                                                                                       
}                                                                                
break;                                                                       
}               
break;        
default:               
WM_DefaultProc(pMsg);               
break;      
}
}

WM_HWIN CreateFramewin(void);
WM_HWIN CreateFramewin(void)
{  
WM_HWIN hWin;  
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);  return hWin;}
/**  * @brief GUI主任务  * @note 无  * @param 无  * @retval 无  */
void MainTask(void)
{    /* 启用UTF-8编码 */
//        GUI_UC_SetEncodeUTF8();      
/* 创建字体 */
//        Create_XBF_Font();      
WM_SetCreateFlags(WM_CF_MEMDEV);      
/* 创建窗口 */
//        CreateFramewin();      
WM_SetCallback(WM_HBKWIN, _cbBkWin);        
/* 初始化 界面 */      
DRAW_init();      
while(1)      
{               
/* 向GRAPH数据对象添加数据 */               
              
GUI_Delay(30);   
}
}/*************************** End of file ****************************/
回复

使用道具 举报

2

主题

0

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2024-11-29 14:38:32 | 显示全部楼层
本帖最后由 yaowang_hao 于 2024-11-29 14:50 编辑

原码太乱,我在这里复制一下BUTTON程序段

/* 第5步:创建需要的按钮*************************************************************/
        hButton0 = BUTTON_Create(370,  44, 100, 50, GUI_ID_BUTTON0, WM_CF_SHOW);
        BUTTON_SetText(hButton0, "RUN");
        BUTTON_SetFont(hButton0, &GUI_Font20B_ASCII);

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2024-11-30 07:05:43 | 显示全部楼层
yaowang_hao 发表于 2024-11-29 14:38
原码太乱,我在这里复制一下BUTTON程序段

/* 第5步:创建需要的按钮********************************** ...

这个函数
hButton0 = BUTTON_Create
默认是创建到桌面窗口的,你可以使用 hButton0 = BUTTON_CreateEx函数,创建到指定窗口试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-10 05:47 , Processed in 0.268087 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表