硬汉嵌入式论坛

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

[emWin] 求助:如何在一子窗口显示信息?

[复制链接]

2

主题

19

回帖

25

积分

新手上路

积分
25
发表于 2016-5-5 17:55:29 | 显示全部楼层 |阅读模式
进入一子窗口,窗口中“进度条”的显示正常。CAN的收发也正常,想把CAN口接收到的信息显示出来,程序中红色的几句。
刚建窗口时,如果(Rec_ERR_Cnt == 2)成立,是有显示的。否则,就没有。在分步调试时有执行到红色的几句,但窗口显示内容不更新,
无法将警示的内容显示出来。请版主和各位帮帮忙,万分感谢!



#include "DIALOG.h"
#include "stm32f4xx.h"
#include "stdio.h"
#include "GUI.h"
#include "APP.h"
///////////////////////////////////////////////////////////////////////////////////////
//       Defines
///////////////////////////////////////////////////////////////////////////////////////
#define ID_BUTTON_18   (GUI_ID_USER + 0x18)
#define ID_BUTTON_19   (GUI_ID_USER + 0x19)
///////////////////////////////////////////////////////////////////////////////////////
//       Static data
///////////////////////////////////////////////////////////////////////////////////////
uint8_t Autostain_state= 0;
uint8_t bar_cnt= 0;
extern uint8_t Rec_MainBoard_state;    //接收到主板的工况
extern uint8_t Rec_ERR_Cnt;                //接收到主板的出错信息
extern uint8_t SSH_PowerOn;               //CAN控制开机信号
extern uint8_t SSH_PowerOff;               //CAN控制停机信号
extern GUI_FONT GUI_FontHZ_YouYuan_24;
extern GUI_FONT GUI_FontHZ_YouYuan_29;
///////////////////////////////////////////////////////////////////////////////////////
static const GUI_WIDGET_CREATE_INFO _aDialogCreateAutoStain[] =
{
  { WINDOW_CreateIndirect, "AutoStain", 0, 0, 0, 800, 480, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "退出", ID_BUTTON_18, 685, 70, 85, 60, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "自动", ID_BUTTON_19, 335, 120, 130, 60, 0, 0x0, 0 },
};
///////////////////////////////////////////////////////////////////////////////////////
static void _cbDialogAutoStain(WM_MESSAGE * pMsg)
{
  WM_HWIN hItem;
  int     NCode;
  int     Id;

  if (Autostain_state == 1) {GUI_SetColor(0x000000FF);} else {GUI_SetColor(0x00FFFF00);}
  GUI_DrawRoundedFrame(298,108,500,190,10,5);
  GUI_SetBkColor(0x00888888);                            //背景颜色

  if (Rec_ERR_Cnt == 2)
  {
    GUI_SetFont(&GUI_FontHZ_YouYuan_29);
    GUI_DispStringAt("警示:",30,25);
    GUI_DispStringAt("传感器出错",30,75);
   }

///////////////////////////////////////////////////////////////////////////////////////
  switch (pMsg->MsgId)
  {
   case WM_INIT_DIALOG:
   
   hItem = pMsg->hWin;                                   //背景颜色
   WINDOW_SetBkColor(hItem, 0x00888888);
   
   hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_18);   //初始化"退出"按键
   BUTTON_SetFont(hItem, &GUI_FontHZ_YouYuan_24);          //字体
   hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_19);   //初始化"自动"按键
   BUTTON_SetFont(hItem, &GUI_FontHZ_YouYuan_24);          //字体

   break;
//////////////////////////////////
   case WM_NOTIFY_PARENT:

   Id = WM_GetId(pMsg->hWinSrc);
   NCode = pMsg->Data.v;
   switch(Id)
   {
//////////////////////////////////
    case ID_BUTTON_18:                   //"退出"按键
    switch(NCode)
    {
      case WM_NOTIFICATION_RELEASED:
      Autostain_state = 0;
      SSH_PowerOn = 0;                  //CAN控制开机信号
      SSH_PowerOff = 1;                 //CAN控制停机信号
      WM_DeleteWindow(pMsg->hWin);
     }
    break;
//////////////////////////////////   
    case ID_BUTTON_19:                   //"自动"按键
    switch(NCode)
    {
      case WM_NOTIFICATION_RELEASED:
      
      if (Autostain_state == 0)
      {
        hItem = pMsg->hWin;
       PROGBAR_CreateEx(20,400,760,50,hItem,WM_CF_SHOW,PROGBAR_CF_HORIZONTAL,GUI_ID_PROGBAR0);//进度条
       hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_PROGBAR0);
       PROGBAR_SetFont(hItem, &GUI_Font32_ASCII);
       PROGBAR_SetMinMax(hItem, 0, 255);     // 设置进度条的大小范围
       PROGBAR_SetValue(hItem, bar_cnt);     //进度条的数值
       Autostain_state = 1;
       SSH_PowerOn = 1;                      //CAN控制开机信号
       SSH_PowerOff = 0;                     //CAN控制停机信号
       }
      break;
     }
    break;
   }
  break;     
/////////////////////////////////
  default:
  WM_DefaultProc(pMsg);
  break;
  }
}
///////////////////////////////////////////////////////////////////////////////////////
static void _cbBkWindow(WM_MESSAGE * pMsg)  
{
   WM_HWIN hItem;
   switch (pMsg->MsgId)
   {
     case WM_TIMER:
     hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_PROGBAR0);    //读取进度条的句柄
     PROGBAR_SetValue(hItem, bar_cnt);                         //进度条的数值
     WM_RestartTimer(pMsg->Data.v, 100);
     break;

     default:
     WM_DefaultProc(pMsg);
     break;
   }
}
///////////////////////////////////////////////////////////////////////////////////////
void Auto_Stain_Proc(void)
{
  GUI_CreateDialogBox(_aDialogCreateAutoStain, GUI_COUNTOF(_aDialogCreateAutoStain),_cbDialogAutoStain, WM_HBKWIN,0,0);
  WM_SetCallback(WM_HBKWIN, _cbBkWindow);
  WM_CreateTimer(WM_HBKWIN, 0, 100, 0);
}
///////////////////////////////////////////////////////////////////////////////////////
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115717
QQ
发表于 2016-5-6 01:23:04 | 显示全部楼层
if (Autostain_state == 1) {GUI_SetColor(0x000000FF);} else {GUI_SetColor(0x00FFFF00);}
  GUI_DrawRoundedFrame(298,108,500,190,10,5);
  GUI_SetBkColor(0x00888888);                            //背景颜色

  if (Rec_ERR_Cnt == 2)
  {
    GUI_SetFont(&GUI_FontHZ_YouYuan_29);
    GUI_DispStringAt("警示:",30,25);
    GUI_DispStringAt("传感器出错",30,75);
   }
===========================================
这些要处理的函数一定要放到相应的消息里面,根据你写的这几个函数,这些应该放到WM_PAINT消息里面实现,如果需要更新WM_PAINT消息,执行指定的窗口无效的函数即可,这样就会更新WM_PAINT。
回复

使用道具 举报

2

主题

19

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2016-5-6 11:08:28 | 显示全部楼层
根据版主的建议,已搞好。感谢版主的帮助,谢谢!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115717
QQ
发表于 2016-5-6 11:18:36 | 显示全部楼层

回 witlong 的帖子

witlong:根据版主的建议,已搞好。感谢版主的帮助,谢谢! (2016-05-06 11:08) 
[s:142][s:142]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-13 20:39 , Processed in 0.390367 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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