硬汉嵌入式论坛

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

[emWin] 今天弄了一天,终于调出来emwin了但是,显示的不正常,大家帮忙看一下

[复制链接]

2

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2015-3-5 21:25:56 | 显示全部楼层 |阅读模式
2F520142986E841D275B6F573B9EB540.png 47E2B10B713C9379B8CD5D1E5A51AB82.png
如图,只有左上角的背景颜色可以调,其他的不可以,怎么回事啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2015-3-6 21:06:09 | 显示全部楼层
感觉的底层驱动还是有些问题,这样,您可以底层不做任何优化,仅使用打点和读点函数,其余的画线等函数不做优化再试试。
回复

使用道具 举报

2

主题

2

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2015-3-7 22:12:46 | 显示全部楼层

回 eric2013 的帖子

  1. /*********************************************************************
  2. *                SEGGER Microcontroller GmbH & Co. KG                *
  3. *        Solutions for real time microcontroller applications        *
  4. **********************************************************************
  5. *                                                                    *
  6. *        (c) 1996 - 2013  SEGGER Microcontroller GmbH & Co. KG       *
  7. *                                                                    *
  8. *        Internet: www.segger.com    Support:  support@segger.com    *
  9. *                                                                    *
  10. **********************************************************************
  11. ** emWin V5.22 - Graphical user interface for embedded applications **
  12. emWin is protected by international copyright laws.   Knowledge of the
  13. source code may not be used to write a similar product.  This file may
  14. only be used in accordance with a license and should not be re-
  15. distributed in any way. We appreciate your understanding and fairness.
  16. ----------------------------------------------------------------------
  17. File        : BASIC_Hello1.c
  18. Purpose     : Simple demo drawing "Hello world"
  19. ----------------------------------------------------------------------
  20. */
  21. #include <stddef.h>
  22. #include <stdlib.h>
  23. #include <string.h>
  24. #include "DIALOG.h"
  25. #include "PROGBAR.h"
  26. #include "LCDConf.h"
  27. /*********************************************************************
  28. *
  29. *       Defines
  30. *
  31. **********************************************************************
  32. */
  33. #define ID_WINDOW_0 (GUI_ID_USER + 0x12)
  34. #define ID_GRAPH_0 (GUI_ID_USER + 0x13)
  35. #define ID_TEXT_0 (GUI_ID_USER + 0x18)
  36. #define ID_TEXT_1 (GUI_ID_USER + 0x1D)
  37. #define ID_EDIT_0 (GUI_ID_USER + 0x1E)
  38. #define ID_EDIT_1 (GUI_ID_USER + 0x1F)
  39. #define ID_TEXT_2 (GUI_ID_USER + 0x20)
  40. #define ID_EDIT_2 (GUI_ID_USER + 0x21)
  41. // USER START (Optionally insert additional defines)
  42. // USER END
  43. static WM_CALLBACK * _pcbCallbackTemperature;
  44. WM_HWIN _hDialogMain, _hDialogColor;
  45. static int _TempMin = 20, _TempMax = 100;
  46. static I16 _aTemp1[800], _aTemp2[800];
  47. static U8 _aColorSep[3] = { 127, 127, 127 };  /* Red, green and blue components */
  48. /*********************************************************************
  49. *
  50. *       Static data
  51. *
  52. **********************************************************************
  53. */
  54. // USER START (Optionally insert additional static data)
  55. // USER END
  56. /*********************************************************************
  57. *
  58. *       _aDialogCreate
  59. */
  60. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  61.     { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 800, 480, 0, 0x0, 0 },
  62.     { GRAPH_CreateIndirect, "Graph", ID_GRAPH_0, 0, 0, 790, 350, 0, 0x0, 0 },
  63.     { TEXT_CreateIndirect, "Text", ID_TEXT_0, 0, 360, 170, 36, 0, 0x64, 0 },
  64.     { TEXT_CreateIndirect, "Text", ID_TEXT_1, 427, 360, 130, 38, 0, 0x64, 0 },
  65.     { EDIT_CreateIndirect, "Edit", ID_EDIT_0, 180, 360, 100, 40, 0, 0x64, 0 },
  66.     { EDIT_CreateIndirect, "Edit", ID_EDIT_1, 531, 360, 100, 40, 0, 0x64, 0 },
  67.     { TEXT_CreateIndirect, "Text", ID_TEXT_2, 0, 425, 170, 36, 0, 0x64, 0 },
  68.     { EDIT_CreateIndirect, "Edit", ID_EDIT_2, 180, 425, 100, 40, 0, 0x64, 0 },
  69.     // USER START (Optionally insert additional widgets)
  70.     // USER END
  71. };
  72. /*********************************************************************
  73. *
  74. *       _OnPaint指示灯
  75. This routine draws the color rectangles.
  76. The widgets are drawn automatically.
  77. */
  78. static void _OnPaint(void) {
  79.     /* Draw RGB values */
  80.     GUI_SetColor(_aColorSep[0] << 8);
  81.     GUI_FillRoundedRect(300, 360, 340, 400, 20);
  82.     GUI_SetColor(_aColorSep[1] << 8);
  83.     GUI_FillRoundedRect(650, 360, 690, 400, 20);
  84.     GUI_SetColor(_aColorSep[2] << 8);
  85.     GUI_FillRoundedRect(300, 425, 340, 465, 20);
  86. }
  87. /*********************************************************************
  88. *
  89. *          Static code
  90. *
  91. **********************************************************************
  92. */
  93. static I16 _GetRandomValue(I16 Old) {
  94.     int MaxValue, yD, MaxDiff = 2;
  95.     I16 yNew;
  96.     MaxValue = _TempMax - _TempMin;
  97.     yD = MaxDiff - (rand() % MaxDiff);
  98.     if (rand() & 1) {
  99.         yNew = Old + yD;
  100.     }
  101.     else {
  102.         yNew = Old - yD;
  103.     }
  104.     if (yNew > MaxValue) {
  105.         yNew -= yD;
  106.     }
  107.     else {
  108.         if (yNew < 0)
  109.             yNew += yD;
  110.     }
  111.     return yNew;
  112. }
  113. /*********************************************************************
  114. *
  115. *       _InitRandomData
  116. */
  117. static void _InitRandomData(I16 * paY, int n) {
  118.     int i, MaxValue;
  119.     MaxValue = _TempMax - _TempMin;
  120.     for (i = 0; i < n; i++) {
  121.         if (!i) {
  122.             paY[i] = rand() % MaxValue;
  123.         }
  124.         else {
  125.             paY[i] = _GetRandomValue(paY[i - 1]);
  126.         }
  127.     }
  128. }
  129. /*******************************************************************
  130. *
  131. *       _DrawGraph
  132. */
  133. static void _DrawGraph(void) {
  134.     GUI_RECT Rect;
  135.     int xSize, ySize, x, y;
  136.     WM_GetClientRect(&Rect);
  137.     xSize = Rect.x1;
  138.     ySize = Rect.y1;
  139.     GUI_SetBkColor(GUI_BLACK);
  140.     GUI_ClearRect(26, 1, 800, ySize - 21);
  141.     GUI_SetColor(GUI_DARKGRAY);
  142.     for (y = 0; y < (ySize - 249); y += 10) {
  143.         int yPos = ySize - 20 - y;
  144.         GUI_DrawHLine(yPos - y * 2, 26, 800);
  145.     }
  146.     for (x = 40; x < (xSize - 25); x += 40) {
  147.         int xPos = x + 25;
  148.         GUI_DrawVLine(xPos, 1, ySize - 21);
  149.     }
  150.     GUI_SetColor(GUI_DARKGREEN);
  151.     GUI_DrawGraph(_aTemp1, GUI_COUNTOF(_aTemp1), 26, ySize - 200);
  152.     GUI_SetColor(GUI_BLUE);
  153.     GUI_DrawGraph(_aTemp2, GUI_COUNTOF(_aTemp2), 26, ySize - 200);
  154.     GUI_SetColor(GUI_GREEN);
  155.     GUI_SetFont(&GUI_Font24_ASCII);
  156.     GUI_DispStringHCenterAt("temperature:", 630,50);
  157.     GUI_FillRect(700, 50, 730, 70);
  158.     GUI_SetColor(GUI_BLUE);
  159.     GUI_SetFont(&GUI_Font24_ASCII);
  160.     GUI_DispStringHCenterAt("smoke:", 630, 90);
  161.     GUI_FillRect(700, 90, 730, 110);
  162. }
  163. /*********************************************************************
  164. *
  165. *       _LabelGraph
  166. */
  167. static void _LabelGraph(void) {
  168.     GUI_RECT Rect;
  169.     int x, y, xSize, ySize;
  170.     WM_GetClientRect(&Rect);
  171.     xSize = Rect.x1;
  172.     ySize = Rect.y1;
  173.     GUI_SetBkColor(GUI_RED);
  174.     GUI_Clear();
  175.     GUI_SetColor(GUI_WHITE);
  176.     GUI_SetPenSize(1);
  177.     GUI_ClearRect(0, (ySize - 21) - ySize, (xSize - 1), (ySize - 1));
  178.     GUI_DrawRect(25, 0, xSize, ySize - 20);
  179.     GUI_SetFont(&GUI_Font6x8);
  180.     for (x = 0; x < (xSize - 20); x += 40) {
  181.         int xPos = x + 25;
  182.         GUI_DrawVLine(xPos, (ySize - 20), (ySize - 14));
  183.         GUI_GotoXY(xPos - 2, (ySize - 9));
  184.         GUI_DispDecSpace(x / 40, 2);
  185.     }
  186.     for (y = 0; y < ySize - 249; y += 10) {
  187.         int yPos = ySize - 20 - y;
  188.         GUI_DrawHLine(yPos-y*2, 20, 25);
  189.         GUI_GotoXY(1, yPos - y * 2 - 8);
  190.         GUI_DispDecSpace(y, 3);
  191.     }
  192. }
  193. /*********************************************************************
  194. *
  195. *       _cbTemperature
  196. *
  197. * Purpose:
  198. *   Callback routine of temperature window
  199. */
  200. static void _cbTemperature(WM_MESSAGE * pMsg) {
  201.     WM_HWIN hDlg;
  202.     hDlg = pMsg->hWin;
  203.     switch (pMsg->MsgId) {
  204.     case WM_PAINT:
  205.         _LabelGraph();
  206.         _DrawGraph();
  207.         GUI_SetColor(GUI_RED);
  208.         GUI_FillRoundedRect(300, 360, 340, 400, 20);
  209.         return;
  210.     }
  211.     if (_pcbCallbackTemperature) {
  212.         _pcbCallbackTemperature(pMsg);
  213.     }
  214. }
  215. /*********************************************************************
  216. *
  217. *       Static code
  218. **********************************************************************
  219. */
  220. // USER START (Optionally insert additional static code)
  221. // USER END
  222. /*********************************************************************
  223. *
  224. *       _cbDialog
  225. */
  226. static void _cbDialog(WM_MESSAGE * pMsg) {
  227.     WM_HWIN hItem;
  228.     int     NCode;
  229.     int     Id;
  230.     WM_HWIN hDlg;
  231.     hDlg = pMsg->hWin;
  232.     switch (pMsg->MsgId) {
  233.     case WM_PAINT://窗口收到WM_PAINT消息时,应重绘自身。将此消息发送到窗口前,WM确保它已被选定。
  234.          _OnPaint();//区域填充
  235.         return;
  236.     case WM_INIT_DIALOG:
  237.         //
  238.         // Initialization of 'Graph'
  239.         //
  240.         hItem = WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0);
  241.         GRAPH_SetBorder(hItem, 100, 10, 5, 50);
  242.         //
  243.         // Initialization of 'Text'
  244.         //
  245.         hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
  246.         TEXT_SetFont(hItem, GUI_FONT_32_ASCII);
  247.         TEXT_SetText(hItem, "temperature:");
  248.         TEXT_SetTextColor(hItem, GUI_GREEN);
  249.         TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
  250.         //
  251.         // Initialization of 'Text'
  252.         //
  253.         hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
  254.         TEXT_SetFont(hItem, GUI_FONT_32_ASCII);
  255.         TEXT_SetTextColor(hItem, 0x00FF0000);
  256.         TEXT_SetText(hItem, "smoke:");
  257.         //
  258.         // Initialization of 'Edit'
  259.         //
  260.         hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
  261.         EDIT_SetFont(hItem, GUI_FONT_24_ASCII);
  262.         EDIT_SetDecMode(hItem, _TempMin, 0, 999, 0, 0);
  263.         //
  264.         // Initialization of 'Edit'
  265.         //
  266.         hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);
  267.         EDIT_SetFont(hItem, GUI_FONT_24_ASCII);
  268.         EDIT_SetDecMode(hItem, _TempMax, 0, 999, 0, 0);
  269.         //
  270.         // Initialization of 'Text'
  271.         //
  272.         hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_2);
  273.         TEXT_SetFont(hItem, GUI_FONT_32_ASCII);
  274.         TEXT_SetText(hItem, "speed:");
  275.         //
  276.         // Initialization of 'Edit'
  277.         //
  278.         hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_2);
  279.         EDIT_SetFont(hItem, GUI_FONT_24_ASCII);
  280.         EDIT_SetDecMode(hItem, _TempMax, 0, 999, 0, 0);
  281.         hItem = WM_GetClientWindow(WM_GetDialogItem(hDlg, ID_GRAPH_0));
  282.         _pcbCallbackTemperature = WM_SetCallback(hItem, _cbTemperature);
  283.         break;
  284.     case WM_NOTIFY_PARENT:
  285.         Id = WM_GetId(pMsg->hWinSrc);
  286.         NCode = pMsg->Data.v;
  287.         switch (NCode) {
  288.             case WM_NOTIFICATION_RELEASED:
  289.             break;
  290.             case WM_NOTIFICATION_VALUE_CHANGED:
  291.             break;
  292.         }
  293.         break;
  294.     default:
  295.         WM_DefaultProc(pMsg);
  296.         break;
  297.     }
  298. }
  299. /*********************************************************************
  300. *
  301. *       Public code
  302. *
  303. **********************************************************************
  304. */
  305. /*********************************************************************
  306. *
  307. *       CreateWindow
  308. */
  309. WM_HWIN CreateWindow(void);
  310. WM_HWIN CreateWindow(void) {
  311.     WM_HWIN hWin;
  312.     hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  313.     return hWin;
  314. }
  315. /*********************************************************************
  316. *
  317. *       Public code
  318. *
  319. **********************************************************************
  320. */
  321. /*******************************************************************
  322. *
  323. *       MainTask
  324. */
  325. void MainTask(void) {
  326.     int Index;
  327.     WM_SetCreateFlags(WM_CF_MEMDEV);
  328.     GUI_Init();
  329.     WM_SetDesktopColor(GUI_BLACK);
  330.     /* Initialize the temperature arrays */
  331.     _InitRandomData(_aTemp1, GUI_COUNTOF(_aTemp1));
  332.     _InitRandomData(_aTemp2, GUI_COUNTOF(_aTemp2));
  333.     _hDialogMain = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  334.     /* Add new temperatures... */
  335.     Index = GUI_COUNTOF(_aTemp1) - 1;
  336.     GUI_SetColor(GUI_RED);
  337.     GUI_FillRoundedRect(300, 360, 340, 400, 20);
  338.     while (1) {
  339.         WM_HWIN hItem;
  340.         GUI_Delay(100); /* Wait a while */
  341.         /* Shift the color arrays */
  342.         memmove(_aTemp1, _aTemp1 + 1, sizeof(_aTemp1)-2);
  343.         memmove(_aTemp2, _aTemp2 + 1, sizeof(_aTemp2)-2);
  344.         /* Add new values */
  345.         _aTemp1[Index] = _GetRandomValue(_aTemp1[Index - 1]);
  346.         _aTemp2[Index] = _GetRandomValue(_aTemp2[Index - 1]);
  347.         EDIT_SetDecMode(WM_GetDialogItem(_hDialogMain, ID_EDIT_0), _aTemp1[Index], 0, 999, 0, 0);
  348.         EDIT_SetDecMode(WM_GetDialogItem(_hDialogMain, ID_EDIT_1), _aTemp2[Index], 0, 999, 0, 0);
  349.         EDIT_SetDecMode(WM_GetDialogItem(_hDialogMain, ID_EDIT_2), 234, 0, 999, 0, 0);
  350.         /* Update windows */
  351.         hItem = WM_GetClientWindow(WM_GetDialogItem(_hDialogMain, ID_GRAPH_0));
  352.         WM_InvalidateWindow(hItem);
  353.     }
  354. }
  355. /*************************** End of file ****************************/
复制代码
eric2013:
感觉的底层驱动还是有些问题,这样,您可以底层不做任何优化,仅使用打点和读点函数,其余的画线等函数不做优化再试试。
我试过了,好像的确是优化时有问题,不优化就好了,
我开始试这做了一个界面,想让一个数值大于一个值时,后面的绿色标志变为红色,但是不管我怎么做,都不会变化,能帮我看一下吗?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 10:04 , Processed in 0.210422 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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