硬汉嵌入式论坛

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

[μCGUI] Ucgui3.90 MULTIPAGE控件硬件显示问题

[复制链接]

1

主题

5

回帖

1

积分

新手上路

积分
1
发表于 2017-1-5 22:41:32 | 显示全部楼层 |阅读模式
在Nios2上开发了一个基于UCOS2+UCGUI3.90的用户操作界面
用VC6.0对界面的开发代码进行仿真,仿真结果如图所示

VC6.0仿真图

VC6.0仿真图


然后将代码烧到FPGA上进行验证,结果是这样的

实物结果图

实物结果图

可以看出是MULTIPAGE部分出现了问题,子窗口在MULTIPAGE控件的显示坐标出现了问题,而且在MULTIPAGE初始化之后的LOAD按键初始化也失败了,也就是LOAD按键不在屏幕上显示了(右下角),其他功能都正常,MULTIPAGE控件可以页面切换,子窗口控件也可以操作,搞了好久,实在不清楚这是什么地方出了问题,而后又用Sample文件夹中的WIDGET_Multipage.c程序试验了一下,结果VC仿真是成功的,而硬件上出现了新的错误,就是控件不显示了,FRAMWIN窗口刷新绿色正常(难道是刷新窗口把控件刷没了?),不知道这两个现象之间有什么关联
下面是有关MULTIPAGE创建部分代码图:

/*********************************************************************
*
*       _aDialogCreateMainWin主窗口
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {

//框架建立
          { FRAMEWIN_CreateIndirect,"Framewin", ID_FRAMEWIN_0,                      0, 0, 800, 480, 0, 0 },

          //MultiPage
          { MULTIPAGE_CreateIndirect,"Multipage",ID_MY_MULTIPAGE,                   15, 115, 220, 320, 0, 0 },
          //LOAD
          { BUTTON_CreateIndirect,      "Button",    ID_BUTTON_LOAD,                      650, 389, 120, 40, 0, 0 }}


/*********************************************************************
*
*       _aDialogCreatePowerDown多页窗口之一
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreatePowerDown[] = {
          { WINDOW_CreateIndirect,     "Window",             0,                             0, 0, 220, 320, 0,  0 },
          { CHECKBOX_CreateIndirect, "CheckBox",         ID_CHECKBOX_Digital,         25, 10, 74, 20, 0,  0 },
          { CHECKBOX_CreateIndirect, "Checkbox",         ID_CHECKBOX_DAC,             25, 35, 80, 20, 0,  0 },
          { CHECKBOX_CreateIndirect, "Checkbox",         ID_CHECKBOX_Clock_Input,     25, 60, 100, 20, 0,  0 },
          { CHECKBOX_CreateIndirect, "Checkbox",         ID_CHECKBOX_Aux_DAC,         25, 85, 90, 20, 0,  0 },
          { CHECKBOX_CreateIndirect, "Checkbox",         ID_CHECKBOX_Enable_Auto_PD, 25, 110, 140, 20, 0,  0 },
          { TEXT_CreateIndirect,     "External PD Mode", ID_TEXT_External_PD_Mode,     20, 140, 189, 23, 0,  0 },
          { LISTBOX_CreateIndirect,  "Listbox",             ID_LISTBOX_External_PD_Mode,25, 170, 169, 60, 0, 0 },
          { BUTTON_CreateIndirect,     &quotD Pin",             ID_BUTTON_PD_PIN,             53, 243, 120, 40, 0,  0 }
};

/*********************************************************************
*
*       _cbDialogPowerDown
*/
static void _cbDialogPowerDown(WM_MESSAGE * pMsg) {……省略};


/*********************************************************************
*
*       _cbDialogMainWin
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
……省略变量定义

  switch (pMsg->MsgId) {
  case WM_INIT_DIALOG:

    //
    // Initialization of 'Multipage'
    //
    hItem = WM_GetDialogItem(hDlg, ID_MY_MULTIPAGE);
    hDialog0 = GUI_CreateDialogBox(_aDialogCreateBaseBand,
                                    GUI_COUNTOF(_aDialogCreateBaseBand),
                                    &_cbDialogBaseBand, WM_UNATTACHED, 0, 0);
    MULTIPAGE_AddPage(hItem, hDialog0, "BaseBand");
    hDialog1 = GUI_CreateDialogBox(_aDialogCreatePowerDown,
                                    GUI_COUNTOF(_aDialogCreatePowerDown),
                                    &_cbDialogPowerDown, WM_UNATTACHED, 0, 0);
    MULTIPAGE_AddPage(hItem, hDialog1, &quotowerDown");
    MULTIPAGE_SetFont(hItem,&GUI_Font16B_ASCII);
    MULTIPAGE_DisablePage(hItem,0);
    MULTIPAGE_SelectPage(hItem,1);
    //
    // Initialization of LOAD
    //
    hItem = WM_GetDialogItem(hDlg, ID_BUTTON_LOAD);
    BUTTON_SetText(hItem, "LOAD");
    BUTTON_SetFont(hItem, &GUI_FontComic24B_ASCII);
break;
  case WM_NOTIFY_PARENT:省略……
break;
}

主函数中用阻塞式创建法创建主窗口,动态存储设置为0x400000,MainTask任务分配了4096单位堆栈
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107262
QQ
发表于 2017-1-6 07:27:08 | 显示全部楼层
楼主方便的话,贴个稍完整的代码,我在模拟器上面测试下。
回复

使用道具 举报

1

主题

5

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-1-6 12:21:25 | 显示全部楼层
#include "MULTIPAGE.h"
#include "DIALOG.h"
#include "BUTTON.h"
#include "GUI.h"

#define GUI_ID_USE_MAIN  GUI_ID_USER+0x10
#define GUI_ID_USE_MULT     GUI_ID_USER+0x30
/*********************************************************************
*
*       Defines FramWin
*
**********************************************************************
*/
#define ID_FRAMEWIN_0                                    (GUI_ID_USE_MAIN + 0x00)
//MultiPage
#define ID_MY_MULTIPAGE                                    (GUI_ID_USE_MAIN + 0x01)
//LOAD
#define ID_BUTTON_LOAD                                    (GUI_ID_USE_MAIN + 0x02)
/*********************************************************************
*
*       Defines Window
*
**********************************************************************
*/
//page1
#define ID_WINDOW_POWERDOWN                                (GUI_ID_USE_MULT + 0x01)
//Power Down)
#define ID_CHECKBOX_Digital                                (GUI_ID_USE_MULT + 0x02)
#define ID_CHECKBOX_DAC                                    (GUI_ID_USE_MULT + 0x03)
#define ID_CHECKBOX_Clock_Input                            (GUI_ID_USE_MULT + 0x04)
#define ID_CHECKBOX_Aux_DAC                                 (GUI_ID_USE_MULT + 0x05)
#define ID_CHECKBOX_Enable_Auto_PD                        (GUI_ID_USE_MULT + 0x06)
//External_PD_Mode
#define ID_TEXT_External_PD_Mode                        (GUI_ID_USE_MULT + 0x07)
#define ID_LISTBOX_External_PD_Mode                        (GUI_ID_USE_MULT + 0x08)
#define ID_BUTTON_PD_PIN                                (GUI_ID_USE_MULT + 0x09)

/*********************************************************************
*
*       _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
          //框架建立
          { FRAMEWIN_CreateIndirect,"Framewin", ID_FRAMEWIN_0,                      0, 0, 800, 480, 0, 0 },
          //MultiPage
          { MULTIPAGE_CreateIndirect,"Multipage",ID_MY_MULTIPAGE,                   15, 115, 220, 320, 0, 0 },
          //LOAD
          { BUTTON_CreateIndirect,      "Button",    ID_BUTTON_LOAD,                      650, 389, 120, 40, 0, 0 }
};
/*********************************************************************
*
*       _aDialogCreatePowerDown
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreatePowerDown[] = {
          { WINDOW_CreateIndirect,     "Window",             0,                             0, 0, 220, 320, 0,  0 },
          { CHECKBOX_CreateIndirect, "CheckBox",         ID_CHECKBOX_Digital,         25, 10, 74, 20, 0,  0 },
          { CHECKBOX_CreateIndirect, "Checkbox",         ID_CHECKBOX_DAC,             25, 35, 80, 20, 0,  0 },
          { CHECKBOX_CreateIndirect, "Checkbox",         ID_CHECKBOX_Clock_Input,     25, 60, 100, 20, 0,  0 },
          { CHECKBOX_CreateIndirect, "Checkbox",         ID_CHECKBOX_Aux_DAC,         25, 85, 90, 20, 0,  0 },
          { CHECKBOX_CreateIndirect, "Checkbox",         ID_CHECKBOX_Enable_Auto_PD, 25, 110, 140, 20, 0,  0 },
          { TEXT_CreateIndirect,     "External PD Mode", ID_TEXT_External_PD_Mode,     20, 140, 189, 23, 0,  0 },
          { LISTBOX_CreateIndirect,  "Listbox",             ID_LISTBOX_External_PD_Mode,25, 170, 169, 60, 0, 0 },
          { BUTTON_CreateIndirect,     &quotD Pin",             ID_BUTTON_PD_PIN,             53, 243, 120, 40, 0,  0 }
};   
/*********************************************************************
*
*       _cbDialogPowerDown
*/
static void _cbDialogPowerDown(WM_MESSAGE * pMsg) {
  WM_HWIN hItem,hDlg;
  int     NCode;
  int     Id;
  static unsigned char  temp=0;
    hDlg = pMsg->hWin;

  switch (pMsg->MsgId) {
  case WM_INIT_DIALOG:
    //
    // Initialization of 'CheckBox'
    //
    hItem = WM_GetDialogItem(hDlg, ID_CHECKBOX_Digital);
    CHECKBOX_SetText(hItem, "Digital");
    CHECKBOX_SetFont(hItem, &GUI_Font16B_ASCII);
    //
    // Initialization of 'Checkbox'
    //
    hItem = WM_GetDialogItem(hDlg, ID_CHECKBOX_DAC);
    CHECKBOX_SetText(hItem, "DAC");
    CHECKBOX_SetFont(hItem, &GUI_Font16B_ASCII);
    //
    // Initialization of 'Checkbox'
    //
    hItem = WM_GetDialogItem(hDlg, ID_CHECKBOX_Clock_Input);
    CHECKBOX_SetText(hItem, "Clock Input");
    CHECKBOX_SetFont(hItem, &GUI_Font16B_ASCII);
    //
    // Initialization of 'Checkbox'
    //
    hItem = WM_GetDialogItem(hDlg, ID_CHECKBOX_Aux_DAC);
    CHECKBOX_SetText(hItem, "Aux. DAC");
    CHECKBOX_SetFont(hItem, &GUI_Font16B_ASCII);
    //
    // Initialization of 'Checkbox'
    //
    hItem = WM_GetDialogItem(hDlg, ID_CHECKBOX_Enable_Auto_PD);
    CHECKBOX_SetText(hItem, "Enable Auto PD");
    CHECKBOX_SetFont(hItem, &GUI_Font16B_ASCII);
    //
    // Initialization of 'External PD Mode'
    //
    hItem = WM_GetDialogItem(hDlg, ID_TEXT_External_PD_Mode);
    TEXT_SetFont(hItem, &GUI_FontComic24B_ASCII);
    //
    // Initialization of 'Listbox'
    //
    hItem = WM_GetDialogItem(hDlg, ID_LISTBOX_External_PD_Mode);
    LISTBOX_AddString(hItem, "Fast Recovery");
    LISTBOX_AddString(hItem, "Full Power Down");
    LISTBOX_SetFont(hItem, &GUI_Font24_ASCII);
    //
    // Initialization of &#39D Pin'
    //
    hItem = WM_GetDialogItem(hDlg, ID_BUTTON_PD_PIN);
    BUTTON_SetFont(hItem, &GUI_Font24B_ASCII);
    //BUTTON_SetBitmapEx(hItem,0,&bmBUTTONOFF,0,0);

    break;
  case WM_NOTIFY_PARENT:
    Id    = WM_GetId(pMsg->hWinSrc);
    NCode = pMsg->Data.v;
    switch(Id) {
//PD_PIN
    case ID_BUTTON_PD_PIN: // Notifications sent by &#39D Pin'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        break;
      case WM_NOTIFICATION_RELEASED:
                temp=~temp;   
                BUTTON_SetPressed(WM_GetDialogItem(hDlg,ID_BUTTON_PD_PIN),temp);               
        break;
      }
      break;
    }
    break;
  default:
    WM_DefaultProc(pMsg);
    break;
  }
}
/*********************************************************************
*
*       _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
  WM_HWIN hItem,hDlg,hDialog;
  int     NCode;
  int     Id;
  //int      Value;
  //static alt_u8 temp=0;
  hDlg = pMsg->hWin;
  switch (pMsg->MsgId) {
    case WM_INIT_DIALOG:
        FRAMEWIN_SetFont(hDlg, &GUI_Font32B_ASCII);
        FRAMEWIN_SetText(hDlg, "High Order Modulation Signal Generator  ");
        FRAMEWIN_SetTextAlign(hDlg, GUI_TA_HCENTER | GUI_TA_VCENTER);
        FRAMEWIN_SetTextColor(hDlg, 0x008000FF);
        SCROLLBAR_CreateAttached(hDlg, SCROLLBAR_CF_VERTICAL);
        //
        // Initialization of 'Multipage'
        //
        hItem = WM_GetDialogItem(hDlg, ID_MY_MULTIPAGE);
        hDialog = GUI_CreateDialogBox(_aDialogCreatePowerDown,
                                        GUI_COUNTOF(_aDialogCreatePowerDown),
                                        &_cbDialogPowerDown, WM_UNATTACHED, 0, 0);
        MULTIPAGE_AddPage(hItem, hDialog, &quotowerDown");
        MULTIPAGE_SetFont(hItem,&GUI_Font16B_ASCII);
        //
        // Initialization of LOAD
        //
        hItem = WM_GetDialogItem(hDlg, ID_BUTTON_LOAD);
        BUTTON_SetText(hItem, "LOAD");
        BUTTON_SetFont(hItem, &GUI_FontComic24B_ASCII);
    case WM_NOTIFY_PARENT:
    Id    = WM_GetId(pMsg->hWinSrc);
    NCode = pMsg->Data.v;
    switch(Id) {
    //LOAD
      case ID_BUTTON_LOAD: // Notifications sent by 'Button'
            switch(NCode) {
            case WM_NOTIFICATION_CLICKED:

              break;
            case WM_NOTIFICATION_RELEASED:

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

void MainTask(void) {
GUI_Init();//初始化
/*窗口自动使用存储设备*/
WM_SetCreateFlags(WM_CF_MEMDEV);
GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
while(1){
            GUI_Delay(1000);
            }
}

软件仿真显示正常
硬件显示图片如下
MULTIPAGE.png
回复

使用道具 举报

1

主题

5

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-1-6 12:22:44 | 显示全部楼层

回 eric2013 的帖子

eric2013:楼主方便的话,贴个稍完整的代码,我在模拟器上面测试下。 (2017-01-06 07:27) 
eric大神请帮忙看下吧
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 11:08 , Processed in 0.168412 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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