OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10930|回复: 15

请问使用了GUIBuilder做界面后,怎么在STemWin里怎么显示数字?

[复制链接]

7

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2013-10-31
在线时间
1 小时
发表于 2015-7-8 17:53:45 | 显示全部楼层 |阅读模式
5金钱
我用GUIBuilder.exe 做了一个简单的界面,然后想加一个温度的数值显示。请问GUI_DispDecAt(num,130,360,2);这个函数要放到哪里?
我可能没放对地方,屏幕一开始显示了数字然后马上就被背景覆盖了。
上了UCOSII,修改原子的“ EMWIN实验14 GUIbulider使用 ”例程,请问数字显示怎样才能不被覆盖,而且数值能刷新显示?谢谢各位了!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-7-8 20:10:33 | 显示全部楼层
数字刷新是需要回调函数的,在对话框的回调函数里面根据小控件发送的消息来刷新,如果是主动修改的话就需要自己新建消息了。然后发送给对话框,然后对话框回调函数根据这个用户自建的消息来做处理,直接显示是不行滴
开往春天的手扶拖拉机
回复

使用道具 举报

7

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2013-10-31
在线时间
1 小时
 楼主| 发表于 2015-7-9 17:15:53 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
请问怎么新建消息并发送显示,大神有例子吗?以前没学过C++和GUI不是很懂这个
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-6-30
在线时间
5 小时
发表于 2016-7-3 21:29:14 | 显示全部楼层
GYD123 发表于 2015-7-9 17:15
回复【2楼】zuozhongkai:
---------------------------------
请问怎么新建消息并发送显示,大神有例子吗? ...

请问这个问题解决了吗
回复

使用道具 举报

35

主题

172

帖子

0

精华

高级会员

Rank: 4

积分
769
金钱
769
注册时间
2016-3-17
在线时间
178 小时
发表于 2016-8-10 19:59:19 | 显示全部楼层
wodeshijieyang 发表于 2016-7-3 21:29
请问这个问题解决了吗

请问,这个问题你解决了吗?
回复

使用道具 举报

39

主题

234

帖子

0

精华

高级会员

Rank: 4

积分
630
金钱
630
注册时间
2016-8-25
在线时间
57 小时
发表于 2018-1-5 23:09:46 | 显示全部楼层
同求,遇到相同的问题,不知道如何弄了
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2019-4-5
在线时间
26 小时
发表于 2019-6-12 17:52:52 | 显示全部楼层

同求,遇到相同的问题,不知道如何弄了
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-5-17
在线时间
41 小时
发表于 2019-6-29 21:57:14 | 显示全部楼层
network628 发表于 2019-6-12 17:52
同求,遇到相同的问题,不知道如何弄了

请看下我发的例程里有,看明白了你就会了。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-5-17
在线时间
41 小时
发表于 2019-6-29 21:58:05 | 显示全部楼层


请看下我发的例程里有,看明白了你就会了。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2019-7-22
在线时间
9 小时
发表于 2019-7-26 17:40:30 | 显示全部楼层
请问具体用哪个函数实现的,谢谢
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2019-5-13
在线时间
9 小时
发表于 2019-7-29 13:04:26 | 显示全部楼层
梦想实现 发表于 2019-6-29 21:58
请看下我发的例程里有,看明白了你就会了。

你好,你怎么处理的文本显示变量,我在你空间 看了,没有找到。
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-5-17
在线时间
41 小时
发表于 2019-9-1 22:08:45 | 显示全部楼层
天地清宁1997 发表于 2019-7-29 13:04
你好,你怎么处理的文本显示变量,我在你空间 看了,没有找到。

EMWIN_DEMO.rar (15.33 KB, 下载次数: 244)
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-5-17
在线时间
41 小时
发表于 2019-9-1 22:12:07 | 显示全部楼层
天地清宁1997 发表于 2019-7-29 13:04
你好,你怎么处理的文本显示变量,我在你空间 看了,没有找到。

//EMWINDEMO任务
void emwindemo_task(void *p_arg)
{
        //更换皮肤
        BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
        CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
        DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
        FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
        HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
        MENU_SetDefaultSkin(MENU_SKIN_FLEX);
        MULTIPAGE_SetDefaultSkin(MULTIPAGE_SKIN_FLEX);
        PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
        RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
        SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
        SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
        SPINBOX_SetDefaultSkin(SPINBOX_SKIN_FLEX);

       
        //MainTask();
       
        while(1)
        {
                MainTask();
                GUI_Delay(100);
                //LimitDetect();//限位开关检测,如果触发了限位开关(TRUE状态),电机停止转动(停止输出脉冲信号)
        }
}
把这个加入到//EMWINDEMO任务中
回复

使用道具 举报

5

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-5-17
在线时间
41 小时
发表于 2019-11-9 23:35:42 | 显示全部楼层
梦想实现 发表于 2019-9-1 22:12
//EMWINDEMO任务
void emwindemo_task(void *p_arg)
{

#include "DIALOG.h"
#include "EmWinHZFont.h"
#include "stm32f10x_it.h"

#include "led.h"
#include "beep.h"
#include "delay.h"
#include "sys.h"
#include "ILI93xx.h"
#include "usart.h"         
#include "24cxx.h"
#include "flash.h"
#include "touch.h"
#include "sram.h"
#include "timer.h"
#include "sdio_sdcard.h"
#include "malloc.h"
#include "GUI.h"
#include "ff.h"
#include "exfuns.h"
#include "w25qxx.h"
#include "includes.h"
#include "fontupd.h"
#include "WM.h"
#include "DIALOG.h"
#include "gpio.h"
#include "max6675.h"
#include "rtc.h"
#include "bjdj.h"
#include "usmart.h"          
#include "key.h"
#include <stdio.h>
#include "touch.h"
#include "bsp_TB6600_TIM.h"
/*********************************************************************
*
*       主页一介面
*
**********************************************************************
*/
#define ID_WINDOW_0 (GUI_ID_USER + 0x00)
#define ID_BUTTON_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_1 (GUI_ID_USER + 0x02)
#define ID_BUTTON_2 (GUI_ID_USER + 0x03)
#define ID_BUTTON_3 (GUI_ID_USER + 0x04)
#define ID_BUTTON_4 (GUI_ID_USER + 0x05)
#define ID_BUTTON_5 (GUI_ID_USER + 0x06)
#define ID_TEXT_0 (GUI_ID_USER + 0x07)
#define ID_TEXT_1 (GUI_ID_USER + 0x08)
#define ID_DROPDOWN_0 (GUI_ID_USER + 0x09)
#define ID_TEXT_2 (GUI_ID_USER + 0x0A)
#define ID_TEXT_3 (GUI_ID_USER + 0x0B)
#define ID_TEXT_4 (GUI_ID_USER + 0x0C)
#define ID_TEXT_5 (GUI_ID_USER + 0x0D)
#define ID_SPINBOX_0 (GUI_ID_USER + 0x0E)
#define ID_TEXT_6 (GUI_ID_USER + 0x0F)
#define ID_TEXT_7 (GUI_ID_USER + 0x10)
#define ID_TEXT_8 (GUI_ID_USER + 0x11)
#define ID_TEXT_9 (GUI_ID_USER + 0x12)
#define ID_TEXT_10 (GUI_ID_USER + 0x13)
#define ID_BUTTON_6 (GUI_ID_USER + 0x14)
#define ID_BUTTON_7 (GUI_ID_USER + 0x15)
#define ID_BUTTON_8 (GUI_ID_USER + 0x16)
#define ID_TEXT_11 (GUI_ID_USER + 0x17)
#define ID_TEXT_12 (GUI_ID_USER + 0x18)




static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { WINDOW_CreateIndirect, "Window0", ID_WINDOW_0, 0, 0, 240, 285, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "00", ID_BUTTON_0, 12, 181, 65, 25, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "01", ID_BUTTON_1, 88, 181, 65, 25, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "02", ID_BUTTON_2, 165, 181, 65, 25, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "03", ID_BUTTON_3, 13, 213, 65, 25, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "04", ID_BUTTON_4, 89, 213, 65, 25, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "05", ID_BUTTON_5, 163, 213, 65, 25, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Text0", ID_TEXT_0, 116, 16, 55, 29, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Text1", ID_TEXT_1, 2, 62, 40, 20, 0, 0x0, 0 },
  { DROPDOWN_CreateIndirect, "Dropdown", ID_DROPDOWN_0, 5, 20, 94, 28, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Text2", ID_TEXT_2, 2, 92, 40, 20, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Text3", ID_TEXT_3, 2, 120, 40, 20, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Text4", ID_TEXT_4, 2, 146, 64, 20, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Text5", ID_TEXT_5, 117, 60, 40, 20, 0, 0x0, 0 },
  { SPINBOX_CreateIndirect, "Spinbox", ID_SPINBOX_0, 173, 13, 61, 35, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Text6", ID_TEXT_6, 116, 90, 40, 20, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Text7", ID_TEXT_7, 46, 60, 68, 20, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Text8", ID_TEXT_8, 50, 93, 50, 20, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Text9", ID_TEXT_9, 52, 120, 140, 20, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Text10", ID_TEXT_10, 90, 146, 50, 20, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "06", ID_BUTTON_6, 11, 244, 65, 25, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "07", ID_BUTTON_7, 89, 244, 65, 25, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "08", ID_BUTTON_8, 164, 244, 65, 25, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Text11", ID_TEXT_11, 158, 62, 70, 20, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Text12", ID_TEXT_12, 175, 92, 55, 20, 0, 0x0, 0 },
  
};
extern  WM_HWIN CreateFramewin3(WM_HWIN hParent);
extern float temprature;//温度
int i;
int t=0;
int p;

extern int rs;//人数
extern int gn;//煮粥或煮饭

extern u16 COUN1;

static void _cbDialog(WM_MESSAGE * pMsg)
{
       
  WM_HWIN hItem;
//  WM_HWIN hDlg;
        WM_HWIN hWin = pMsg->hWin;
  int     NCode;
  int     Id;
  //int     Index;
  int     IAa;
       
        char buf0[6];
        char buf1[6];
        char buf2[1];
        char buf3[6];
        char buf4[10];
       
        //hDlg   = pMsg->hWin;
        COUN1=TIM3->CNT;//计数奇存器
       
  switch (pMsg->MsgId)
                {                               
                                        case WM_TIMER://定时器消息,到时间时有效                                       
                                       
                                        sprintf((char*)buf0,"%02d:%02d:%02d",calendar.hour,calendar.min,calendar.sec);//时分秒
                                        TEXT_SetText(WM_GetDialogItem(hWin,ID_TEXT_11), buf0);
                                       
                                        sprintf((char*)buf1,"%02d/%02d/%02d",calendar.w_year,calendar.w_month,calendar.w_date);//年月日
                                        TEXT_SetText(WM_GetDialogItem(hWin,ID_TEXT_7), buf1);
                                       
                                        sprintf((char*)buf2,"%03d",i=temprature);//温度
                                        TEXT_SetText(WM_GetDialogItem(hWin,ID_TEXT_12), buf2);                               
                                       
                                        sprintf((char*)buf4,"%02d/%02d/%02d/%02d:%02d",calendar.w_year,calendar.w_month,calendar.w_date,alarm.hour,alarm.min);//闹钟的年月日时分秒
                                        TEXT_SetText(WM_GetDialogItem(hWin,ID_TEXT_9), buf4);
                                       
                                        sprintf((char*)buf3,"%03d",p=COUN1);//流量计
                                        TEXT_SetText(WM_GetDialogItem(hWin,ID_TEXT_10), buf3);
                                       
                                        switch(calendar.week)
                                                {
                                                                        case 0:                                                                               
                                                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_8);
                                                                                TEXT_SetFont(hItem, &GUI_FontHZ16);
                                                                                TEXT_SetText(hItem, "星期日");
                                                                                break;
                                                                        case 1:
                                                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_8);
                                                                                TEXT_SetFont(hItem, &GUI_FontHZ16);
                                                                                TEXT_SetText(hItem, "星期一");
                                                                                break;
                                                                        case 2:
                                                                               
                                                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_8);
                                                                                TEXT_SetFont(hItem, &GUI_FontHZ16);
                                                                                TEXT_SetText(hItem, "星期二");
                                                                                break;
                                                                        case 3:
                                                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_8);
                                                                                TEXT_SetFont(hItem, &GUI_FontHZ16);
                                                                                TEXT_SetText(hItem, "星期三");
                                                                                break;
                                                                        case 4:
                                                                               
                                                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_8);
                                                                                TEXT_SetFont(hItem, &GUI_FontHZ16);
                                                                                TEXT_SetText(hItem, "星期四");
                                                                                break;
                                                                        case 5:
                                                                               
                                                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_8);
                                                                                TEXT_SetFont(hItem, &GUI_FontHZ16);
                                                                                TEXT_SetText(hItem, "星期五");
                                                                                break;
                                                                        case 6:                                                       
                                                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_8);
                                                                                TEXT_SetFont(hItem, &GUI_FontHZ16);
                                                                                TEXT_SetText(hItem, "星期六");
                                                                                break;  
                                                }

       
                                                WM_RestartTimer(pMsg->Data.v, 200);
                                                if(WM_IsCompletelyCovered(pMsg->hWin))
                                               
                                                break;        //当切换到其他页面什么都不做

                                                break;

   case WM_INIT_DIALOG://初始化消息,创建窗口/控件时有效,比如在这里设置一些控件的初始参数
               
      hItem = WM_GetDialogItem(pMsg->hWin, ID_DROPDOWN_0);
                  DROPDOWN_SetFont(hItem, &GUI_FontHZ24);
                        DROPDOWN_AddString(hItem, "煮饭");//给 DROPDOWN 列表添加元素
                        DROPDOWN_AddString(hItem, "煮粥");
                        DROPDOWN_AddString(hItem, "其它");
                        DROPDOWN_SetListHeight(hItem, 100);
         
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_DROPDOWN_0);
            //gn = DROPDOWN_GetSel(hItem);//返回当前选定元素的数量。         
                  DROPDOWN_SetSel(hItem,gn);//设置当前选定内容。
                        //DROPDOWN_SetSelExp(hItem,gn);//设置处于展开状态的附加 LISTBOX 的选定项
                        printf("gn1:%d gn1\r\n",gn);//打印
                        //printf("hItem2:%d hItem2\r\n",hItem);//打印
//                        RTC_Get();//更新时间
//       
//                        sprintf((char*)buf0,"%02d:%02d:%02d",calendar.hour,calendar.min,calendar.sec);//时分秒
//                        TEXT_SetText(WM_GetDialogItem(hWin,ID_TEXT_11), buf0);
//                       
//                        sprintf((char*)buf1,"%02d/%02d/%02d",calendar.w_year,calendar.w_month,calendar.w_date);//年月日
//                        TEXT_SetText(WM_GetDialogItem(hWin,ID_TEXT_7), buf1);
//                        printf("w_year:%d \rs\n",calendar.w_year);//打印
         
    hItem = WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_0);         
    SPINBOX_SetFont(hItem, &GUI_FontHZ24);
                SPINBOX_SetValue(hItem, rs);
    SPINBOX_SetRange(hItem, 1, 8);
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
    TEXT_SetFont(hItem, &GUI_FontHZ24);
    TEXT_SetText(hItem, "人数");               
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
    TEXT_SetFont(hItem, &GUI_FontHZ16);
    TEXT_SetText(hItem, "日期:");
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_2);
    TEXT_SetFont(hItem, &GUI_FontHZ16);
    TEXT_SetText(hItem, "星期:" );
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_3);
    TEXT_SetFont(hItem, &GUI_FontHZ16);
    TEXT_SetText(hItem, "定时:" );
   
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_4);
    TEXT_SetFont(hItem, &GUI_FontHZ16);
    TEXT_SetText(hItem, "流量计:");                       
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_5);
    TEXT_SetText(hItem, "时间:");
    TEXT_SetFont(hItem, &GUI_FontHZ16);
    TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
   
     hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_6);
    TEXT_SetFont(hItem, &GUI_FontHZ16);
    TEXT_SetText(hItem, "温度:");
    TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_7);
    TEXT_SetFont(hItem, GUI_FONT_16_ASCII);
    TEXT_SetText(hItem, "T7");
    TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
    TEXT_SetTextColor(hItem, 0x00FF0000);
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_8);
    TEXT_SetFont(hItem, GUI_FONT_16_ASCII);
    TEXT_SetText(hItem, "T8");
    TEXT_SetTextColor(hItem, 0x00FF0000);
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_9);
    TEXT_SetFont(hItem, GUI_FONT_16_ASCII);
    TEXT_SetText(hItem, "T9");
    TEXT_SetTextColor(hItem, 0x00FF0000);
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_10);
    TEXT_SetFont(hItem, &GUI_FontHZ16);
    TEXT_SetTextColor(hItem, 0x00FF0000);        //颜色

                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_11);
    TEXT_SetFont(hItem, &GUI_FontHZ16);
                TEXT_SetTextColor(hItem, 0x00FF0000);       

    //TEXT_SetText(hItem, "温度");
               
                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_12);
    TEXT_SetFont(hItem, GUI_FONT_16_ASCII);
    TEXT_SetText(hItem, "3");       
                TEXT_SetTextColor(hItem, 0x00FF0000);       
       
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
    BUTTON_SetFont(hItem, &GUI_FontHZ16);
    BUTTON_SetText(hItem, "开始");
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
    BUTTON_SetFont(hItem, &GUI_FontHZ16);
                BUTTON_SetText(hItem, "停止");
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
     BUTTON_SetFont(hItem, &GUI_FontHZ16);
    BUTTON_SetText(hItem, "取消");
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_3);
    BUTTON_SetFont(hItem, &GUI_FontHZ16);
    BUTTON_SetText(hItem, "设置");
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_4);
    BUTTON_SetFont(hItem, &GUI_FontHZ16);
    BUTTON_SetText(hItem, "开/合");
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_5);
    BUTTON_SetFont(hItem, GUI_FONT_16_ASCII);
    BUTTON_SetText(hItem, "+");
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_6);
    BUTTON_SetFont(hItem, GUI_FONT_16_ASCII);
    BUTTON_SetText(hItem, "F");
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_7);
    BUTTON_SetFont(hItem, GUI_FONT_16_ASCII);
    BUTTON_SetText(hItem, "G");
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_8);
    BUTTON_SetFont(hItem, GUI_FONT_16_ASCII);
    BUTTON_SetText(hItem, "-");
  
   
    break;
               
  case WM_NOTIFY_PARENT://操作触发消息处理(操作屏幕程序会跑到这里),比如点击按键、点击编辑框(任何的操作)等等......
    Id    = WM_GetId(pMsg->hWinSrc);
    NCode = pMsg->Data.v;
    switch(Id)
                        {
                                case ID_DROPDOWN_0: //
                                                switch(NCode)
                                                {
                                                                case WM_NOTIFICATION_CLICKED://已单击控件
                                                                       
                                                                        break;
                                                                case WM_NOTIFICATION_RELEASED://已释放控件

                                                                        break;
                                                                case WM_NOTIFICATION_SEL_CHANGED://下拉列表的选择已更改
                                                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_DROPDOWN_0);//返回对话框项目 (小工具)的窗口句柄
                                                                                gn = DROPDOWN_GetSel(hItem);//返回当前选定元素的数量。
                                                                        //        printf("gn2:%d \r\n",gn);//打印                                                               
                                                                               
                                                                                AT24CXX_WriteOneByte(SYSTEM_PARA_SAVE_BASE+4,gn);//指定地址写入一个字节
       
                                                                        break;
                                                               
                                                }
                                                break;
                                        case ID_SPINBOX_0: //
                                                switch(NCode)
                                                {
                                                                case WM_NOTIFICATION_CLICKED://已单击控件
                                                                       
                                                                        break;
                                                                case WM_NOTIFICATION_RELEASED://已释放控件

                                                                       
                                                                        break;
                                                                case WM_NOTIFICATION_MOVED_OUT://已单击控件,并且指针已移出控件,但没有释放
                                                                       
                                                                        break;
                                                                case WM_NOTIFICATION_VALUE_CHANGED://编辑控件的值 (内容)已更改

                                                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_0);//返回对话框项目 (小工具)的窗口句柄
                                                                                rs = SPINBOX_GetValue(hItem);//返回当前选定元素的数量。
                                                                                AT24CXX_WriteOneByte(SYSTEM_PARA_SAVE_BASE+8,rs);//指定地址写入一个字节
                                                                                switch(IAa)
                                                                                                {
                                                                                                case 1:
                                                                                                         
                                                                                                        break;
                                                                                                        case 2:
                                                                                                                       
                                                                                                        break;
                                                                                                        case 3:
                                                                                                                                                                                                                                                               
                                                                                                        break;
                                                                                                }
                                                                        break;
                                                               
                                                }
                                                break;
                                       
                                        case ID_BUTTON_0: //开始
                                                switch(NCode)
                                                        {
                                                                        case WM_NOTIFICATION_CLICKED:
                                                                               
                                                                        //hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
                                                                        //EDIT_SetFont(hItem, &GUI_FontHZ16);
                                                                        //EDIT_SetText(hItem, "Hello world!");
                                                                       
                                                                                break;
                                                                        case WM_NOTIFICATION_RELEASED://按下放开后入到这里面
                                                                               
                                                                        BEEP=!BEEP;
                                                                                //kaiqie();//开始运行函数
                                                                        kaiqie2();//开始运行函数//调试用
                                                                        //        printf("gn2:%d \r\n",gn);//打印
                                                                                break;
                                                                       
                                                }
                                                break;
                                        case ID_BUTTON_1: //停止
                                                switch(NCode)
                                                        {
                                                                        case WM_NOTIFICATION_CLICKED:
                                                                               
                                                                                break;
                                                                        case WM_NOTIFICATION_RELEASED:
                                                                                BEEP=0;
                                                                       
                                                                                break;
                                                                       
                                                }
                                                break;
                                        case ID_BUTTON_2: // 取消
                                                switch(NCode)
                                                        {
                                                                        case WM_NOTIFICATION_CLICKED:
                                                                               
                                                                                break;
                                                                        case WM_NOTIFICATION_RELEASED:
                                                                                BEEP=0;
                                                                                All_STOP ();
                                                                                break;
                                                                       
                                                  }
                                                break;
                                        case ID_BUTTON_3: //设置
                                                switch(NCode)
                                                        {
                                                                        case WM_NOTIFICATION_CLICKED:
                                                                               
                                                                                break;
                                                                        case WM_NOTIFICATION_RELEASED:
                                                                               
                                                                                        CreateFramewin3(WM_HBKWIN);
                                                                                break;
                                                                       
                                                }
                                                break;
                                        case ID_BUTTON_4: // 开/合
                                                switch(NCode)
                                                        {
                                                                        case WM_NOTIFICATION_CLICKED:
                                                                               
                                                                                break;
                                                                        case WM_NOTIFICATION_RELEASED:
                                                                               
                                                                                break;
                                                                       
                                                }
                                                break;
                                        case ID_BUTTON_5: // +
                                                switch(NCode)
                                                        {
                                                                        case WM_NOTIFICATION_CLICKED:
                                                                               
                                                                                break;
                                                                        case WM_NOTIFICATION_RELEASED:
                                                                               
                                                                                break;
                                                                       
                                                }
                                                break;
                                        case ID_BUTTON_6: // F
                                                switch(NCode)
                                                        {
                                                                        case WM_NOTIFICATION_CLICKED:
                                                                               
                                                                                break;
                                                                        case WM_NOTIFICATION_RELEASED:
                                                                                if((tp_dev.touchtype&0X80)==0)TP_Adjust(); //电阻屏才需要校准
                                                                                                //system_task_return=0;        //清除退出标志
                                                                                break;
                                                                       
                                                }
                                                break;
                                        case ID_BUTTON_7: //G
                                                switch(NCode)
                                                        {
                                                                        case WM_NOTIFICATION_CLICKED:
                                                                               
                                                                                break;
                                                                        case WM_NOTIFICATION_RELEASED:
                                                                               
                                                                                break;
                                                                       
                                                }
                                                break;
                                        case ID_BUTTON_8: // -
                                                switch(NCode)
                                                        {
                                                                        case WM_NOTIFICATION_CLICKED:
                                                               
                                                                       
                                                                        break;
                                                                        case WM_NOTIFICATION_RELEASED:
                                                               
                                                                        break;
                                                       
                                                        }
                                                        break;
                                       
    }
    break;
  
                default:
    WM_DefaultProc(pMsg);
    break;
  }
}


WM_HWIN CreateWindow0(WM_HWIN hParent);
WM_HWIN CreateWindow0(WM_HWIN hParent)
{
  WM_HWIN hWin;
        //WM_HWIN hWia;
  hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);//页面创建函数,返回该页面句柄
        WM_CreateTimer(hWin, 0, 200, 0); //创建一个软件定时器
        //WM_CreateTimer(WM_GetClientWindow(hWin),0,100,0);//添加此段
  return hWin;
}
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2020-10-6
在线时间
2 小时
发表于 2020-10-7 15:49:49 | 显示全部楼层
本帖最后由 guozhongyuan 于 2020-10-7 15:57 编辑

刚好遇到这个问题,最终解决了。现在我详细描述一下问题和解决过程。
我想要在emwin的graph曲线图控件下面加一行文本显示,用guibuilder设计了界面后正常初始化,然后百度到要添加一个窗口定时器每隔一段时间刷新这个文本的数值;要在switch那里写定时器回调函数的操作:“定时器reset”。但是一开始,我的定时器回调函数始终运行不到,查找了很久相关资料后,发现是因为这个“定时器应该初始化到hwin的window,而不是hwin自己”,我猜测可能的原因是,如果定时器初始化到hwin代表的dialog,可能dialog一直在刷新,因此此达不到定时结束的时刻,而hwin背后的window是一直在延续的,因此像楼上的代码最后几行,应该用注释掉的这个“//WM_CreateTimer(WM_GetClientWindow(hWin),0,100,0);//添加此段”,而不是“WM_CreateTimer(hWin, 0, 200, 0); ”


下一层我再放入完整代码供参考
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2020-10-6
在线时间
2 小时
发表于 2020-10-7 15:58:46 | 显示全部楼层
本帖最后由 guozhongyuan 于 2020-10-7 16:01 编辑


#include "GraphDLG.h"
#include "stdlib.h"
#include "./usart/bsp_usart.h"

#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
#define ID_GRAPH_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_0        (GUI_ID_USER + 0x03)
#define ID_TEXT_0        (GUI_ID_USER + 0x04)

/*数据对象句柄*/
GRAPH_DATA_Handle Graphdata;
//extern uint16_t LCD_X_LENGTH,LCD_Y_LENGTH; //屏幕XY方向像素值
extern u16 show_value;

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, 0, 320, 240, 0, 0x0, 0 },
  { GRAPH_CreateIndirect, "Graph", ID_GRAPH_0, 0, 0, 310, 160, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 15, 180, 80, 20, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Text", ID_TEXT_0, 120, 180, 138, 20, 0, 0x64, 0 },
};

static void _cbDialog(WM_MESSAGE* pMsg) {
        //WM_HWIN hWin = pMsg->hWin;
        WM_HWIN hItem;
  GRAPH_SCALE_Handle hScaleV;
        int     NCode;
        int     Id;
        char                 show_num[16];
               
        switch (pMsg->MsgId) {
        case WM_INIT_DIALOG:
               
                /* 初始化Framewin控件 */
                hItem = pMsg->hWin;
                FRAMEWIN_SetText(hItem, " STM32F103 ECG detector");
                FRAMEWIN_SetFont(hItem, GUI_FONT_16B_ASCII);
        
                /* 初始化Graph控件 */
                hItem = WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0);
                GRAPH_SetColor(hItem, GUI_WHITE, GRAPH_CI_BK);
                GRAPH_SetColor(hItem, GUI_BLACK, GRAPH_CI_GRID);
                GRAPH_SetBorder(hItem, 30, 10, 10, 10);
          GRAPH_SetGridDistX(hItem, 50);
          GRAPH_SetGridDistY(hItem, 50);
          GRAPH_SetLineStyleH(hItem, GUI_LS_DOT);
          GRAPH_SetLineStyleV(hItem, GUI_LS_DOT);
          GRAPH_SetGridVis(hItem, 1);
          /* 创建垂直刻度对象 */
          hScaleV = GRAPH_SCALE_Create(15, GUI_TA_HCENTER | GUI_TA_LEFT,GRAPH_SCALE_CF_VERTICAL, 50);
          GRAPH_AttachScale(hItem, hScaleV);
          GRAPH_SCALE_SetFactor(hScaleV, 10);
          /* 创建数据对象 */
          Graphdata = GRAPH_DATA_YT_Create(GUI_RED, 300, 0, 0);
          GRAPH_AttachData(hItem, Graphdata);
               
                /* 初始化Text控件 */
                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
         TEXT_SetText(hItem, "HAPPY EVERYDAY");
         TEXT_SetFont(hItem, GUI_FONT_20B_ASCII);
         TEXT_SetTextColor(hItem, GUI_MAKE_COLOR(0x00000080));
                        
                break;
               
        case WM_TIMER:                                //定时器操作
        {        
                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
                //TEXT_SetText(hItem, "CAONIMA");
                sprintf((char*)show_num,"%16d",show_value);//显示
                TEXT_SetText(hItem, show_num);
                TEXT_SetFont(hItem, GUI_FONT_20B_ASCII);

                WM_RestartTimer(pMsg->Data.v, 50);  //重新计时 50ms
                //WM_InvalidateWindow(pMsg->hWin);//丢弃窗口使重新刷新,其实并不需要,注释掉也能正常更新Text
                //WM_ShowWindow(pMsg->hWin);
                break;
        }

        
        case WM_NOTIFY_PARENT://触发操作
    Id    = WM_GetId(pMsg->hWinSrc);
    NCode = pMsg->Data.v;
    switch(Id) {
    case ID_TEXT_0: // Notifications sent by 'Text'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        break;
      case WM_NOTIFICATION_RELEASED:
        break;
      case WM_NOTIFICATION_VALUE_CHANGED:
        break;
      }
      break;
    case ID_BUTTON_0: // Notifications sent by 'Button'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        break;
      case WM_NOTIFICATION_RELEASED:
        break;
      }
      break;
    }
    break;

        
        default:
                WM_DefaultProc(pMsg);
                break;
        }
}


WM_HWIN CreateFramewin(void);
WM_HWIN CreateFramewin(void)
{
        WM_HWIN hWin;
        //WM_HTIMER hTimer;
        //hTimer = WM_CreateTimer(hWin, 0, 200, 0); //创建一个软件定时器
        hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
        WM_CreateTimer(WM_GetClientWindow(hWin),0,1000,0);

        return hWin;
}

void MainTask(void)
{
        GUI_Init();
        /* 创建窗口 */
        CreateFramewin();
        
        while(1)
        {
                /* 向GRAPH数据对象添加数据 */
                GRAPH_DATA_YT_AddValue(Graphdata, show_value/2/10);
                GUI_Delay(50);
        }
}

/*************************** End of file ****************************/

回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 11:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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