硬汉嵌入式论坛

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

[emWin] 关于GUI_MEMDEV_CreateFixed和GUI_MEMDEV_WriteAt的问题

[复制链接]

45

主题

70

回帖

205

积分

高级会员

积分
205
发表于 2018-7-19 16:00:14 | 显示全部楼层 |阅读模式
WM_SelectWindow(hGraph);//选定要显示波形的窗口
hMemDSO = GUI_MEMDEV_CreateFixed(0,
                                     0,
                                     361, //xsiz
                                     210,//ysize
                                     GUI_MEMDEV_HASTRANS,
                                     GUI_MEMDEV_APILIST_8,
                                     GUICC_4);
        GUI_MEMDEV_Select(hMemDSO);
        DSO_DrawBakFrame(0,0,360,180);
        GUI_MEMDEV_Select(0);
        WM_SelectWindow(0);

我想学着2代示波器,把方框绘制在内存设备中。如果设置的ysize为180甚至是200,在y方向上显示不全,知道把ysize设置到210才能显示完全。这是什么现象???


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-19 16:03:29 | 显示全部楼层
函数DSO_DrawBakFrame(0,0,360,180);不是自适应大小的。
回复

使用道具 举报

45

主题

70

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-7-19 16:11:42 | 显示全部楼层
DSO_DrawBakFrame(0,0,360,180);函数就是简单的画个360*180的矩形框,并且再画几道方格线而已。需要自适应。我看例程里的DSO_DrawBakFrame(0,0,599,399);是自适应大小的??
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-19 16:14:37 | 显示全部楼层
chinashaoshu 发表于 2018-7-19 16:11
DSO_DrawBakFrame(0,0,360,180);函数就是简单的画个360*180的矩形框,并且再画几道方格线而已。需要自适应 ...

不是自适应的。
回复

使用道具 举报

45

主题

70

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-7-19 16:31:44 | 显示全部楼层
eric2013老师,那么问题来了,到底为啥啊。为啥分配360*180的内存却显示不完全,在Y方向上差一截呢?有一条讯息,我不是在桌面上创建的内存设备,是在另一个窗口hGraph上创建的,窗口设置为(0,24,480,208)
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-19 16:39:41 | 显示全部楼层
chinashaoshu 发表于 2018-7-19 16:31
eric2013老师,那么问题来了,到底为啥啊。为啥分配360*180的内存却显示不完全,在Y方向上差一截呢?有一条 ...

在模拟器上面测试下,把测试代码发上来,我看下。
回复

使用道具 举报

45

主题

70

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-7-19 17:55:15 | 显示全部楼层
  1. #include <string.h>
  2. #include "GUI.h"
  3. #include "DIALOG.h"
  4. #include "WM.h"
  5. #include "BUTTON.h"
  6. #include "CHECKBOX.h"
  7. #include "DROPDOWN.h"
  8. #include "EDIT.h"
  9. #include "FRAMEWIN.h"
  10. #include "LISTBOX.h"
  11. #include "MULTIEDIT.h"
  12. #include "RADIO.h"
  13. #include "SLIDER.h"
  14. #include "TEXT.h"
  15. #include "PROGBAR.h"
  16. #include "SCROLLBAR.h"
  17. #include "LISTVIEW.h"
  18. #include "GRAPH.h"
  19. #include "MENU.h"
  20. #include "MULTIPAGE.h"
  21. #include "ICONVIEW.h"
  22. #include "TREEVIEW.h"
  23. #define RECOMMENDED_MEMORY (1024L * 100)


  24. #define ID_WINDOW_0 (GUI_ID_USER + 0x00)

  25. /*********************************************************************
  26. *
  27. *       Dialog resources
  28. *
  29. **********************************************************************
  30. */
  31. #if GUI_WINSUPPORT


  32. #endif
  33. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  34.   { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 24, 480, 208, 0, 0x0, 0 },

  35. };


  36. void DSO_DrawBakFrame(short int x0, short int y0, short int x1, short int y1)
  37. {
  38.         short int x;
  39.         short int y;
  40.         
  41.         GUI_SetBkColor(GUI_BLACK);
  42.         GUI_ClearRect(x0, y0, x1, y1);  
  43.         
  44.     GUI_SetPenSize(1);
  45.         GUI_SetColor(0X323532);
  46.         for(y = 1; y < 6; y++)
  47.         {
  48.                 GUI_DrawLine(x0,y0+(y*30),x1,y0+(y*30));
  49.         }
  50.         for(x = 1; x < 12; x++)
  51.         {
  52.                 GUI_DrawLine(x0+(x*30),y0,x0+(x*30),y1);
  53.         }
  54.         GUI_SetColor(0x00749b9f);
  55.         GUI_DrawRect(x0,y0,x1,y1);
  56. }
  57. /*
  58. *********************************************************************************************************

  59. *********************************************************************************************************
  60. */
  61. GUI_MEMDEV_Handle   hMemDSO;
  62. void DSO_Init(short int ucCreateFlag)
  63. {

  64.         GUI_SetBkColor(0);
  65.     GUI_Clear();
  66.         
  67.         GUI_MEMDEV_WriteAt(hMemDSO, 115, 10);
  68.         //DSO_DrawBakFrame(115,10,475,190);
  69.         if(ucCreateFlag == 1)
  70.         {

  71.         }
  72. }

  73. /*********************************************************************
  74. *
  75. *       Static code
  76. *
  77. **********************************************************************
  78. */
  79. static void InitDialogGraph(WM_MESSAGE * pMsg)
  80. {


  81. }
  82. /*********************************************************************
  83. *
  84. *       _cbDialog
  85. */
  86. static void _cbCallGra(WM_MESSAGE * pMsg) {
  87.   switch (pMsg->MsgId) {
  88.                 case WM_DELETE:
  89.                         
  90.                         break;
  91.   case WM_INIT_DIALOG:
  92.                 InitDialogGraph(pMsg);
  93.     break;
  94.         case WM_PAINT:
  95.                 DSO_Init(1);
  96.                 break;
  97.    
  98.     break;
  99.   default:
  100.     WM_DefaultProc(pMsg);
  101.     break;
  102.   }
  103. }

  104. /*********************************************************************
  105. *
  106. *       Public code
  107. *
  108. **********************************************************************
  109. */
  110. /*********************************************************************
  111. *
  112. *       CreateWindow
  113. */
  114. WM_HWIN CreateWindow(void);
  115. WM_HWIN CreateWindow(void) {
  116.   WM_HWIN hWin;
  117.   hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbCallGra, WM_HBKWIN, 0, 0);
  118.   return hWin;
  119. }
  120. static void _cbBkWindow(WM_MESSAGE * pMsg) {
  121.     switch (pMsg->MsgId) {
  122.     case WM_PAINT:
  123.         WM_SetDesktopColor(GUI_BLACK);
  124.         GUI_Clear();
  125.         break;
  126.     default:
  127.         WM_DefaultProc(pMsg);
  128.     }
  129. }

  130. WM_HWIN hGraph;
  131. GUI_MEMDEV_Handle   hMemDSO;
  132. void MainTask(void)
  133. {
  134.         GUI_Init();
  135.         if (GUI_ALLOC_GetNumFreeBytes() < RECOMMENDED_MEMORY) {
  136.     GUI_ErrorOut("Not enough memory available.");
  137.     return;
  138.   }

  139.         //WM_MULTIBUF_Enable(1);
  140.         
  141.         WM_SetCreateFlags(WM_CF_MEMDEV);
  142.         WM_EnableMemdev(WM_HBKWIN);
  143.         WM_SetCallback(WM_HBKWIN,_cbBkWindow);
  144.         hGraph = CreateWindow();
  145.         WM_SelectWindow(hGraph);
  146.         hMemDSO = GUI_MEMDEV_CreateFixed(0,
  147.                                          0,
  148.                                          361,
  149.                                          181,
  150.                                                                          GUI_MEMDEV_HASTRANS,
  151.                                                                         GUI_MEMDEV_APILIST_8,
  152.                                                                         GUICC_4);
  153.                 GUI_MEMDEV_Select(hMemDSO);
  154.                 DSO_DrawBakFrame(0,0,360,180);
  155.                 GUI_MEMDEV_Select(0);
  156.                 WM_SelectWindow(0);
  157.         while(1)
  158.         {
  159.                 GUI_Delay(100);
  160.         }
  161. }
复制代码
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-19 18:41:42 | 显示全部楼层
帮你修改了一个
  1. #include <string.h>
  2. #include "GUI.h"
  3. #include "DIALOG.h"
  4. #include "WM.h"
  5. #include "BUTTON.h"
  6. #include "CHECKBOX.h"
  7. #include "DROPDOWN.h"
  8. #include "EDIT.h"
  9. #include "FRAMEWIN.h"
  10. #include "LISTBOX.h"
  11. #include "MULTIEDIT.h"
  12. #include "RADIO.h"
  13. #include "SLIDER.h"
  14. #include "TEXT.h"
  15. #include "PROGBAR.h"
  16. #include "SCROLLBAR.h"
  17. #include "LISTVIEW.h"
  18. #include "GRAPH.h"
  19. #include "MENU.h"
  20. #include "MULTIPAGE.h"
  21. #include "ICONVIEW.h"
  22. #include "TREEVIEW.h"
  23. #define RECOMMENDED_MEMORY (1024L * 100)


  24. #define ID_WINDOW_0 (GUI_ID_USER + 0x00)

  25. /*********************************************************************
  26. *
  27. *       Dialog resources
  28. *
  29. **********************************************************************
  30. */
  31. #if GUI_WINSUPPORT


  32. #endif
  33. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  34.   { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 24, 480, 208, 0, 0x0, 0 },

  35. };


  36. void DSO_DrawBakFrame(short int x0, short int y0, short int x1, short int y1)
  37. {
  38.         short int x;
  39.         short int y;
  40.         
  41.         GUI_SetBkColor(GUI_BLACK);
  42.         GUI_ClearRect(x0, y0, x1, y1);  
  43.         
  44.     GUI_SetPenSize(1);
  45.         GUI_SetColor(0X323532);
  46.         for(y = 0; y < 6; y++)
  47.         {
  48.                 GUI_DrawLine(x0,y0+(y*30),x1,y0+(y*30));
  49.         }
  50.         for(x = 1; x < 12; x++)
  51.         {
  52.                 GUI_DrawLine(x0+(x*30),y0,x0+(x*30),y1);
  53.         }
  54.         GUI_SetColor(0x00749b9f);
  55.         GUI_DrawRect(x0,y0,x1,y1);
  56. }
  57. /*
  58. *********************************************************************************************************

  59. *********************************************************************************************************
  60. */
  61. GUI_MEMDEV_Handle   hMemDSO;
  62. void DSO_Init(short int ucCreateFlag)
  63. {

  64.         GUI_SetBkColor(0);
  65.     GUI_Clear();
  66.         
  67.         GUI_MEMDEV_WriteAt(hMemDSO, 0, 24);
  68.         //DSO_DrawBakFrame(115,10,475,190);
  69.         if(ucCreateFlag == 1)
  70.         {

  71.         }
  72. }

  73. /*********************************************************************
  74. *
  75. *       Static code
  76. *
  77. **********************************************************************
  78. */
  79. static void InitDialogGraph(WM_MESSAGE * pMsg)
  80. {


  81. }
  82. /*********************************************************************
  83. *
  84. *       _cbDialog
  85. */
  86. static void _cbCallGra(WM_MESSAGE * pMsg) {
  87.   switch (pMsg->MsgId) {
  88.                 case WM_DELETE:
  89.                         
  90.                         break;
  91.   case WM_INIT_DIALOG:
  92.                 InitDialogGraph(pMsg);
  93.     break;
  94.         case WM_PAINT:
  95.                 DSO_Init(1);
  96.                 break;
  97.    
  98.     break;
  99.   default:
  100.     WM_DefaultProc(pMsg);
  101.     break;
  102.   }
  103. }

  104. /*********************************************************************
  105. *
  106. *       Public code
  107. *
  108. **********************************************************************
  109. */
  110. /*********************************************************************
  111. *
  112. *       CreateWindow
  113. */
  114. WM_HWIN CreateWindow(void);
  115. WM_HWIN CreateWindow(void) {
  116.   WM_HWIN hWin;
  117.   hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbCallGra, WM_HBKWIN, 0, 0);
  118.   return hWin;
  119. }
  120. static void _cbBkWindow(WM_MESSAGE * pMsg) {
  121.     switch (pMsg->MsgId) {
  122.     case WM_PAINT:
  123.         WM_SetDesktopColor(GUI_BLACK);
  124.         GUI_Clear();
  125.         break;
  126.     default:
  127.         WM_DefaultProc(pMsg);
  128.     }
  129. }

  130. WM_HWIN hGraph;
  131. void MainTask(void)
  132. {
  133.         GUI_Init();
  134.         if (GUI_ALLOC_GetNumFreeBytes() < RECOMMENDED_MEMORY) {
  135.     GUI_ErrorOut("Not enough memory available.");
  136.     return;
  137.   }

  138.         //WM_MULTIBUF_Enable(1);
  139.         
  140.         WM_SetCreateFlags(WM_CF_MEMDEV);
  141.         WM_EnableMemdev(WM_HBKWIN);
  142.         WM_SetCallback(WM_HBKWIN,_cbBkWindow);
  143.         hGraph = CreateWindow();
  144.         //WM_SelectWindow(hGraph);
  145.         hMemDSO = GUI_MEMDEV_CreateFixed(0,
  146.                                          0,
  147.                                          361,
  148.                                          181,
  149.                                                                          GUI_MEMDEV_HASTRANS,
  150.                                                                         GUI_MEMDEV_APILIST_8,
  151.                                                                         GUICC_4);
  152.                 GUI_MEMDEV_Select(hMemDSO);
  153.                 DSO_DrawBakFrame(0,0,360,180);
  154.                 GUI_MEMDEV_Select(0);
  155.                 //WM_SelectWindow(0);
  156.         while(1)
  157.         {
  158.                 GUI_Delay(100);
  159.         }
  160. }
复制代码


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-19 18:42:51 | 显示全部楼层
QQ截图20180719184136.png
回复

使用道具 举报

45

主题

70

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-7-19 20:59:17 | 显示全部楼层
谢谢eric2013老师,那么把WM_SelectWindow(hGraph)屏蔽了,到时候绘制的时候GUI_MEMDEV_WriteAt(hMemDSO, 0, 24);,是绘制在桌面上,还是hGraph这个窗口上。
我想要绘制在窗口上的。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-7-20 01:44:12 | 显示全部楼层
chinashaoshu 发表于 2018-7-19 20:59
谢谢eric2013老师,那么把WM_SelectWindow(hGraph)屏蔽了,到时候绘制的时候GUI_MEMDEV_WriteAt(hMemDSO, 0 ...

是在窗口的回调函数WM_PAINT消息里面互转的,也就是在窗口hGraph上面的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-16 21:38 , Processed in 0.693886 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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