STM32
直播中

刘慧

7年用户 1676经验值
私信 关注
[问答]

emwin使用GUIBuilder后,如何在此界面上画点描线?

如题,我现在使用Emwin的GUIBuilder,做了一个界面,但是做好之后使用GUI_DrawVLine(40,20,500);函数,想在上面画条线,但是现在线画不出来,画曲线也应该是画不出来的,那么如果我要在GUIBuilder这个基础上画点描线,那么应该注意什么呢?请大神指点!

画图程序整体顺序如下:

        while(GUI_Init() != 0);//GUI初始化
        CreateWindow();//描绘使用GUIBuilder产生的图形
        GUI_Exec();//执行
        GUI_SetColor(GUI_GREEN);//设置画笔颜色为绿色
        GUI_DrawVLine(40,20,500);//画竖线

回帖(2)

鄢蓉

2024-5-14 10:03:26
使用回调函数的WM_PAINT即可实现 
举报

他在笑

2024-5-14 17:00:28
要在EmWin的GUIBuilder界面上画点描线,您需要遵循以下步骤:

1. 创建一个自定义的GUI窗口或控件,用于绘制点和线。这可以通过继承现有的GUI控件(如GUI_MultiPage)并覆盖其绘制函数来实现。

2. 在自定义控件的绘制函数中,使用GUI的绘图函数(如GUI_ClearRect、GUI_DrawVLine、GUI_DrawHLine等)来绘制所需的图形。您可以使用这些函数来画点、线、矩形等。

3. 在您的应用程序中,创建一个实例化的自定义控件,并将其添加到GUIBuilder生成的界面中。这样,您的自定义控件将作为界面的一部分显示。

4. 在自定义控件的构造函数或初始化函数中,设置绘图参数,如颜色、线宽等。

5. 在自定义控件的绘制函数中,使用GUI的绘图函数来绘制点和线。您可以使用循环和数学函数(如正弦、余弦等)来生成曲线。

6. 在您的应用程序的主循环中,调用GUI_Exec()函数来处理用户输入和绘制界面。

以下是一个简单的示例,展示了如何在EmWin中创建一个自定义控件并绘制一条线:

```c
#include "GUI.h"

typedef struct {
  GUI_WIDGET widget;
  int x, y, len;
} MY_WIDGET;

static void _Draw(MY_WIDGET * pWidget, GUI_CALLBACK_VOID_PTR DrawCallback, void * p) {
  GUI_SetBkColor(GUI_WHITE);
  GUI_ClearRect(0, 0, pWidget->x, pWidget->y);
  GUI_SetPenSize(1);
  GUI_SetColor(GUI_RED);
  GUI_DrawVLine(pWidget->x, pWidget->y, pWidget->len);
}

static void _Create(MY_WIDGET * pWidget, WM_HWIN hWin, int x0, int y0, int xSize, int ySize, int Id, int Flags) {
  pWidget->widget.Create(hWin, x0, y0, xSize, ySize, Id, Flags);
  pWidget->x = xSize;
  pWidget->y = ySize;
  pWidget->len = 500;
}

void CreateMyWidget(void) {
  MY_WIDGET * pWidget;
  pWidget = (MY_WIDGET *)GUI_ALLOC_AllocZero(sizeof(MY_WIDGET));
  _Create(pWidget, GUI_Window_CreateEx(0, WM_CF_SHOW, 0, 0, 100, 100, 0));
  GUI_WIDGET_SetCallback(pWidget, (void (*)(void*, tGUI_CALLBACK_PARAM))_Draw);
}

int main(void) {
  GUI_Init();
  CreateMyWidget();
  GUI_Exec();
  return 0;
}
```

请注意,这只是一个简单的示例,您需要根据您的具体需求进行调整。希望这对您有所帮助!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分