硬汉嵌入式论坛

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

[emWin] 如何解决Emwin文本小工具文本显示重叠问题??

[复制链接]

1

主题

2

回帖

1

积分

新手上路

积分
1
发表于 2015-9-1 17:22:23 | 显示全部楼层 |阅读模式
通过自定义消息进入到对话框中的回调函数后,对文本小工具的文本内容进行重写时(用TEXT_SetText()函数),上次的内容并未被清除,新写的内容覆盖在上面形成重叠,如何解决??
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2015-9-1 22:03:53 | 显示全部楼层
可否看下你的这部分内容是如何实现的,感觉是实现上的问题,text控件是可以自动重绘背景的。
回复

使用道具 举报

1

主题

2

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2015-9-2 10:02:29 | 显示全部楼层
#include <stdlib.h>
#include "GUI.h"
#include <string.h>
#include <stdio.h>
#include <time.h>

static time_t realtime;
struct tm *timeInfo;
typedef struct _DATE_TIME
{
    int nYear;
    int nMonth;
    int nDay;
    int nHour;
    int nMinute;
    int nSecond;
    int nwDay;
    int nyDay;
    int nisdst;
}SELF_TIME;
SELF_TIME selfTime;

char *weekDay[7]=
{
      "\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe6\\x97\\xa5",//sunday
      "\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe4\\xb8\\x80",//monday
      "\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe4\\xba\\x8c",//tuesday
      "\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe4\\xb8\\x89",//wednesday
      "\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe5\\x9b\\x9b",//thursday
      "\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe4\\xba\\x94",//friday
      "\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe5\\x85\\xad",//saturday
};

static const GUI_WIDGET_CREATE_INFO _aDialogCreateTime[] = {
  { WINDOW_CreateIndirect,    "Time", 0,                  1,   1, 798, 70, FRAMEWIN_CF_MOVEABLE },
  { TEXT_CreateIndirect,      "2015-08-28",     GUI_ID_TEXT0,   20,  15, 250,  30 ,TEXT_CF_LEFT },
  { TEXT_CreateIndirect,      "\\xe6\\x98\\x9f\\xe6\\x9c\\x9f\\xe4\\xba\\x8c", GUI_ID_TEXT1,   30,  45,  80,  30, TEXT_CF_LEFT },
    { TEXT_CreateIndirect,      "10:30:40", GUI_ID_TEXT2,  300,  40,  300,  40, TEXT_CF_LEFT }
};

static void _ChangeFrameClientText(FRAMEWIN_Handle hObj)
{
    WM_MESSAGE Message;
    Message.MsgId=MSG_CHANGE_MAIN_TEXT;
    WM_SendMessage(hObj,&Message);
}

static void _cbDialogTime(WM_MESSAGE * pMsg)
{
    WM_HWIN hDlg, hItem;
    char strDate[12]={0};
    char strTime[12]={0};
    char strWeek[10]={0};
    hDlg = pMsg->hWin;

  switch (pMsg->MsgId) {
  
      case MSG_CHANGE_MAIN_TEXT:
            selfTime.nYear = timeInfo->tm_year+1900;
            selfTime.nMonth= timeInfo->tm_mon+1;
            selfTime.nDay= timeInfo->tm_mday;
            selfTime.nHour= timeInfo->tm_hour;
            selfTime.nMinute= timeInfo->tm_min;
            selfTime.nSecond= timeInfo->tm_sec;
            selfTime.nwDay= timeInfo->tm_wday;
            sprintf(strDate,"%04d-%02d-%02d",selfTime.nYear,selfTime.nMonth,selfTime.nDay);
            sprintf(strTime,"%02d:%02d:%02d",selfTime.nHour,selfTime.nMinute,selfTime.nSecond);
            sprintf(strWeek,"%s",weekDay[selfTime.nwDay]);
            
            //日期
            hItem = WM_GetDialogItem(hDlg, GUI_ID_TEXT0);
            TEXT_SetFont(hItem, &GUI_Fontfangsong24);        
            TEXT_SetText(hItem,strDate);
            
            //星期
            hItem = WM_GetDialogItem(hDlg, GUI_ID_TEXT1);
            TEXT_SetFont(hItem, &GUI_Fontfangsong24);   
            TEXT_SetText(hItem,strWeek);

            //时间
            hItem = WM_GetDialogItem(hDlg, GUI_ID_TEXT2);
            TEXT_SetFont(hItem, &GUI_Fontyouyuanshuzi36);   
            TEXT_SetText(hItem,strTime);

            break;
  case WM_PAINT:
    break;
  default:
    WM_DefaultProc(pMsg);
  }
}


void MainTask(void)
{
        WM_HWIN hFrameWin;
        WM_HWIN hDialogTime;
         int msOldtime=0;
       int msCurtime=0;
      
      
         GUI_Init();
         
          GUI_UC_SetEncodeUTF8();
         
         ……
         hFrameWin = FRAMEWIN_Create("FrameWindow", _cbFrameWin, WM_CF_SHOW, FRAME_X, FRAME_Y, FRAME_XSIZE, FRAME_YSIZE);
        ……
         time(&realtime);
       timeInfo = localtime(&realtime);
         hDialogTime = GUI_CreateDialogBox(_aDialogCreateTime, GUI_COUNTOF(_aDialogCreateTime), _cbDialogTime, hFrameWin, 1, 30);
         ……
         
         msOldtime =  GUI_GetTime();
         while (1)
         {
          msCurtime    =  GUI_GetTime();
          if(msCurtime - msOldtime>=1000 )//每秒刷新时间
          {
   
                msOldtime = msCurtime;
                time(&realtime);
              timeInfo = localtime(&realtime);
                _ChangeFrameClientText(hDialogTime);
          }
         
          GUI_Exec();
         
}
回复

使用道具 举报

1

主题

2

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2015-9-2 10:06:04 | 显示全部楼层
请大家帮我看看上面程序有啥问题,为啥 TEXT_SetText(hItem,strTime);刷新时会出现文字重叠问题
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2015-9-3 09:11:23 | 显示全部楼层
把这个变量设置为全局变量试试看, WM_MESSAGE Message;
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-9-13 17:37:48 | 显示全部楼层
我也是文本重叠问题
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 01:47 , Processed in 0.239893 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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