硬汉嵌入式论坛

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

[emWin] MUlTIPAGE 小工具创建后不能切换页

[复制链接]

1

主题

15

回帖

1

积分

新手上路

积分
1
发表于 2014-9-19 16:13:49 | 显示全部楼层 |阅读模式
MULTIPAGE创建后只能在一个页面中进行操作,不能切换页,移植了uC/OS-II,扩展了触摸屏和LCD。
有没有做过类似项目的,请教下问题可能出现的地方。
回复

使用道具 举报

1

主题

22

回帖

25

积分

新手上路

积分
25
发表于 2014-9-19 16:17:10 | 显示全部楼层
不是有个滚动条的吗
回复

使用道具 举报

1

主题

15

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2014-9-19 16:23:14 | 显示全部楼层
滚动条时emWin自动添加的,可以使用,我所指定是page1切换到其他页面(比如page3,共6页)时屏幕没有反应,并且系统会卡死。
回复

使用道具 举报

1

主题

15

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2014-9-19 16:27:53 | 显示全部楼层
[s:142] 请教下
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116837
QQ
发表于 2014-9-19 22:01:37 | 显示全部楼层
1 先把游标显示出来,看看你的触摸屏能够触摸到那个地方吗。
2 另外你的动态内存可能设置的过小。

方便的话,把代码贴出来,贴这部分即可。
回复

使用道具 举报

1

主题

15

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2014-9-20 08:21:09 | 显示全部楼层

回 eric2013 的帖子

eric2013:1 先把游标显示出来,看看你的触摸屏能够触摸到那个地方吗。
2 另外你的动态内存可能设置的过小。

方便的话,把代码贴出来,贴这部分即可。 (2014-09-19 22:01)
我先调试下,得有了结果回复您。
回复

使用道具 举报

1

主题

15

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2014-9-20 10:41:19 | 显示全部楼层

回 eric2013 的帖子

eric2013:
1 先把游标显示出来,看看你的触摸屏能够触摸到那个地方吗。
2 另外你的动态内存可能设置的过小。

方便的话,把代码贴出来,贴这部分即可。
在工程中没有印象配置了动态内存,仍不清楚在那个地方配置,我把代码发给您看看,
也感谢您的建议。
这是MULTIPAGE小工具创建的代码,有其他地方的代码需要的您再给我说一声。


/* 头文件包含 */
#include"menuEmWin.h"
#include"multipage.h"
#include"framewin.h"
#include"WM.h"
/* 变量声明 */
/* 定义FRAMEWIN_SKINFLEX_PROPS 用来修改框架窗口外观 */
FRAMEWIN_SKINFLEX_PROPS pFrameOri; // <<------
/*
===============================================================================
-------------------------------------------------------------------------------
     官方例程调试
===============================================================================
-------------------------------------------------------------------------------
*/
/* Part1 资源表 */
static const GUI_WIDGET_CREATE_INFO _aDialogCreate1[] = {
  { WINDOW_CreateIndirect,    "Dialog 1", 0,                   0,   0, 260, 100, FRAMEWIN_CF_MOVEABLE },
  { BUTTON_CreateIndirect,    "Button",   GUI_ID_BUTTON0,      5,  30,  80,  20, 0},
  { TEXT_CreateIndirect,      "Dialog 1", 0,                   5,  10,  50,  20, TEXT_CF_LEFT }
};
static const GUI_WIDGET_CREATE_INFO _aDialogCreate2[] = {
  { WINDOW_CreateIndirect,    "Dialog 2", 0,                   0,   0, 260, 100, FRAMEWIN_CF_MOVEABLE },
  { CHECKBOX_CreateIndirect,  "",         GUI_ID_CHECK0,       5,  30,   0,   0, 0},
  { CHECKBOX_CreateIndirect,  "",         GUI_ID_CHECK1,       5,  50,   0,   0, 0},
  { TEXT_CreateIndirect,      "Select 0", GUI_ID_TEXT0,       25,  30,  50,  15, TEXT_CF_LEFT },
  { TEXT_CreateIndirect,      "Select 1", GUI_ID_TEXT1,       25,  50,  50,  15, TEXT_CF_LEFT },
  { TEXT_CreateIndirect,      "Dialog 2", 0,                   5,  10,  50,  20, TEXT_CF_LEFT }
};
static const GUI_WIDGET_CREATE_INFO _aDialogCreate3[] = {
  { WINDOW_CreateIndirect,    "Dialog 3", 0,                   0,   0, 260, 100, FRAMEWIN_CF_MOVEABLE },
  { RADIO_CreateIndirect,     "",         GUI_ID_RADIO0,       5,  30,   0,   0, 0, 3},
  { TEXT_CreateIndirect,      "Option 1", GUI_ID_TEXT0,       25,  30,  50,  15, TEXT_CF_LEFT },
  { TEXT_CreateIndirect,      "Option 2", GUI_ID_TEXT1,       25,  50,  50,  15, TEXT_CF_LEFT },
  { TEXT_CreateIndirect,      "Option 3", GUI_ID_TEXT2,       25,  70,  50,  15, TEXT_CF_LEFT },
  { TEXT_CreateIndirect,      "Dialog 3", 0,                   5,  10,  50,  20, TEXT_CF_LEFT }
};
static const GUI_WIDGET_CREATE_INFO _aDialogCreate4[] = {
  { WINDOW_CreateIndirect,    "Dialog 4", 0,                   0,   0, 260, 100, FRAMEWIN_CF_MOVEABLE },
  { MULTIEDIT_CreateIndirect, "Text",     GUI_ID_MULTIEDIT0,   5,  30, 200,  40  },
  { TEXT_CreateIndirect,      "Dialog 4", 0,                   5,  10,  50,  20, TEXT_CF_LEFT }
};
static const GUI_WIDGET_CREATE_INFO _aDialogCreate5[] = {
  { WINDOW_CreateIndirect,    "Dialog 5", 0,                   0,   0, 260, 100, FRAMEWIN_CF_MOVEABLE },
  { SLIDER_CreateIndirect,    "",         GUI_ID_SLIDER0,      5,  30, 200,  40  },
  { TEXT_CreateIndirect,      "Dialog 5", 0,                   5,  10,  50,  20, TEXT_CF_LEFT }
};
static const GUI_WIDGET_CREATE_INFO _aDialogCreate6[] = {
  { WINDOW_CreateIndirect,    "Dialog 6", 0,                   0,   0, 260, 100, FRAMEWIN_CF_MOVEABLE },
  { SCROLLBAR_CreateIndirect, "",         GUI_ID_SCROLLBAR0,   5,  30, 200,  40  },
  { TEXT_CreateIndirect,      "Dialog 6", 0,                   5,  10,  50,  20, TEXT_CF_LEFT }
};
/*  part2 各类回调函数 */

/*********************************************************************  
*  
*       _cbFrameWin
   框架窗口小工具回调函数
*  
* Purpose:  
*   Callback routine of the frame window behind the MULTIPAGE widget  
*/   
static void _cbFrameWin(WM_MESSAGE* pMsg) {   
  switch (pMsg->MsgId) {   
  case WM_PAINT:   
    GUI_SetBkColor(GUI_GREEN);   
    GUI_Clear();   
    break;   
  default:   
    WM_DefaultProc(pMsg);   
  }   
}
/*********************************************************************
*
*       _cbDialog4
   多页工具中索引值为3的窗口回调函数
*/
static void _cbDialog4(WM_MESSAGE * pMsg) {
  WM_HWIN hItem;
  WM_HWIN hDlg;
  hDlg = pMsg->hWin;
  switch (pMsg->MsgId) {
  case WM_INIT_DIALOG:
    hItem = WM_GetDialogItem(hDlg, GUI_ID_MULTIEDIT0);
    MULTIEDIT_SetText(hItem, "MULTIEDIT widget");
    MULTIEDIT_SetInsertMode(hItem, 1);
    break;
  default:
    WM_DefaultProc(pMsg);
  }
}
/*********************************************************************
*
*       _cbBkWindow
*     
*  Function description
*    Callback routine of the background window.
*    It shows the sample title and draws the background.
*/
static void _cbBkWindow(WM_MESSAGE * pMsg) {
  switch (pMsg->MsgId) {
  case WM_PAINT:
    GUI_SetBkColor(GUI_BLUE);
    GUI_Clear();
    GUI_SetColor(GUI_WHITE);
    GUI_SetFont(&GUI_Font24_ASCII);
    GUI_DispStringHCenterAt("WIDGET_Multipage - Sample", 160, 5);
    break;
  default:
    WM_DefaultProc(pMsg);
  }
}

/* =====================================================

定义MULTIPAGE_SKINFLEX_PROPS数据类型的变量,配置multipage小工具皮肤外观

    -------------------------------------------------- */
MULTIPAGE_SKINFLEX_PROPS multipageSkinFlex = {
  GUI_LIGHTYELLOW,  // backcolor for selected items
  GUI_WHITE,      // top color of top gradient
  GUI_LIGHTBLUE,  // buttom color of buttom gradient
  GUI_LIGHTBLUE,   // top color of buttom gradient
  GUI_BLUE,      // buttom color of buttom gradient
  GUI_GRAY,      // frame color
  GUI_BLACK     // text color
};/* ==================================================================
定义BUTTON_SKINFLEX_PROPS 数据类型变量,配置button小工具皮肤外观

------------------------------------------------------------------ */BUTTON_SKINFLEX_PROPS buttonSkinFlex  = {
  GUI_LIGHTGREEN,  // outer color of suurounding frame
  GUI_LIGHTYELLOW,  // inner color of surrounding frame
  GUI_LIGHTGRAY,   // color of area bettwen farme and inner  area
  GUI_WHITE,       // upper color of upper gradient
  GUI_LIGHTGRAY,   // lower color of upper gradient
  GUI_LIGHTGRAY,  // upper color of lower gradient
  GUI_GRAY,   // lower color of lower gradient
  10     // radius radius of rounded corner 圆角的半径
};
/*===============================================================================   * 定义函数,创建multipage,用于工程控制   -----------------------------------------------------------------------------*/int menuTask()
{
  /*
0-----------------------------------------------------------------
0=================================================================
*/
WM_HWIN hMultiPage; WM_HWIN hDialog; WM_HWIN hFrameWin;  /*
  0-----------------------------------------------------------------
  0=================================================================
  */
GUI_CURSOR_Show();
/* 设置多页窗口小工具默认皮肤 */
MULTIPAGE_SetDefaultSkin (MULTIPAGE_SKIN_FLEX); MULTIPAGE_SetSkinFlexProps( &multipageSkinFlex, MULTIPAGE_PI_ENABLED);
MULTIPAGE_SetSkinFlexProps( &multipageSkinFlex, MULTIPAGE_PI_SELECTED);
  /* 设置各类窗体小工具皮肤 */
     PROGBAR_SetDefaultSkin   (PROGBAR_SKIN_FLEX);
    BUTTON_SetDefaultSkin    (BUTTON_SKIN_FLEX);
    SCROLLBAR_SetDefaultSkin (SCROLLBAR_SKIN_FLEX);
    SLIDER_SetDefaultSkin    (SLIDER_SKIN_FLEX);
    HEADER_SetDefaultSkin    (HEADER_SKIN_FLEX);  FRAMEWIN_GetSkinFlexProps(&pFrameOri,FRAMEWIN_SKINFLEX_PI_ACTIVE);
pFrameOri.Radius = 0;
pFrameOri.aColorFrame[0] = 0xCDC673;
pFrameOri.aColorFrame[1] = 0xCDC673;
pFrameOri.aColorFrame[2] = 0xCDC673;
pFrameOri.BorderSizeL = 2;
pFrameOri.BorderSizeT = 2;
pFrameOri.aColorTitle[0] = 0xCDC673;
pFrameOri.aColorTitle[1] = 0xCDC673;
FRAMEWIN_SetSkinFlexProps(&pFrameOri, FRAMEWIN_SKINFLEX_PI_ACTIVE);    WM_EnableMemdev(WM_HBKWIN);   
   WM_SetCallback(WM_HBKWIN, &_cbBkWindow);
   //
   // Create the frame window
   //
   hFrameWin = FRAMEWIN_Create("FrameWindow", &_cbFrameWin, WM_CF_SHOW, 35, 25, 280, 210);   
   FRAMEWIN_SetActive(hFrameWin, 1);   
   FRAMEWIN_SetMoveable(hFrameWin, 1);
   //
   // Create the MULTIPAGE widget
   //
   hMultiPage = MULTIPAGE_CreateEx(7, 6, 220, 120, WM_GetClientWindow(hFrameWin), WM_CF_SHOW, 0,0);   //
   // Create and attach the MULTIPAGE dialog windows
   //
   hDialog = GUI_CreateDialogBox(_aDialogCreate1, GUI_COUNTOF(_aDialogCreate1), NULL, WM_GetClientWindow(hMultiPage), 0, 0);
   MULTIPAGE_AddPage(hMultiPage, hDialog, &quot 1");
   hDialog = GUI_CreateDialogBox(_aDialogCreate2, GUI_COUNTOF(_aDialogCreate2), NULL,       WM_GetClientWindow(hMultiPage), 0, 0);
   MULTIPAGE_AddPage(hMultiPage, hDialog, &quotage 2");   hDialog = GUI_CreateDialogBox(_aDialogCreate3, GUI_COUNTOF(_aDialogCreate3), NULL,       WM_GetClientWindow(hMultiPage), 0, 0);
   MULTIPAGE_AddPage(hMultiPage, hDialog, &quotage 3");

   hDialog = GUI_CreateDialogBox(_aDialogCreate4, GUI_COUNTOF(_aDialogCreate4), _cbDialog4, WM_GetClientWindow(hMultiPage), 0, 0);
   MULTIPAGE_AddPage(hMultiPage, hDialog, &quotage 4");   hDialog = GUI_CreateDialogBox(_aDialogCreate5, GUI_COUNTOF(_aDialogCreate5), NULL,       WM_GetClientWindow(hMultiPage), 0, 0);
   MULTIPAGE_AddPage(hMultiPage, hDialog, &quotage 5");
  
  hDialog = GUI_CreateDialogBox(_aDialogCreate6, GUI_COUNTOF(_aDialogCreate6), NULL,       WM_GetClientWindow(hMultiPage), 0, 0);
   MULTIPAGE_AddPage(hMultiPage, hDialog, &quotage 6");

MULTIPAGE_SelectPage( hMultiPage, 2);
return 0;   
}
回复

使用道具 举报

1

主题

15

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2014-9-22 09:31:54 | 显示全部楼层

回 ray94521 的帖子

ray94521:在工程中没有印象配置了动态内存,仍不清楚在那个地方配置,我把代码发给您看看,
也感谢您的建议。
这是MULTIPAGE小工具创建的代码,有其他地方的代码需要的您再给我说一声。

....... (2014-09-20 10:41)
选项卡仍然不能使用,
回复

使用道具 举报

1

主题

15

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2014-9-22 11:16:35 | 显示全部楼层

回 eric2013 的帖子

eric2013:1 先把游标显示出来,看看你的触摸屏能够触摸到那个地方吗。
2 另外你的动态内存可能设置的过小。

方便的话,把代码贴出来,贴这部分即可。 (2014-09-19 22:01)
用的是stm32f103RCT6,动态内存分配的是 30k Byte,块平均大小为ox80,不知道是不是动态内存过小导致了这个问题。
回复

使用道具 举报

5

主题

208

回帖

223

积分

高级会员

积分
223
发表于 2014-9-23 13:08:30 | 显示全部楼层
multipage好像很费内存的。我在4.3上面用的好好的。到了7寸屏上面,就会出现multipage上面的控制全部不显示的情况。我用的是VET6,50K动态内存。
回复

使用道具 举报

1

主题

15

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2014-9-23 17:03:28 | 显示全部楼层

回 honami520 的帖子

honami520:multipage好像很费内存的。我在4.3上面用的好好的。到了7寸屏上面,就会出现multipage上面的控制全部不显示的情况。我用的是VET6,50K动态内存。 (2014-09-23 13:08)
我现在怀疑是不是程序写错了,方便的话,能不能把你写过的程序给我看一下,我写MULTIPAGE是按照官网给的demo写的,在硬件平台上运行就是不能切换页面,很是郁闷。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-7 22:42 , Processed in 0.496451 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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