您尚未登录。

楼主 #1 2019-12-03 17:23:17

szchen2006
会员
注册时间: 2019-10-09
已发帖子: 216
积分: 166.5

emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

我在eimWin5.4中创建了一个对话框,然后给对话框设置了背景图片,接着我在这个对话框的回调函数的WM_PAINT消息里画一个矩形,却无法显示。请教一下大佬们,这是为什么呢?该怎么解决呢?十分感谢!

离线

#2 2019-12-03 17:35:03

win32prog
会员
注册时间: 2019-11-28
已发帖子: 138
积分: 138

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

emwin 仿的是 win32 的 api,

如果想收到 WM_PAINT 消息, 那么要调用 WM_InvalidateRect() 函数才行, 这样会重绘。

离线

#3 2019-12-03 17:35:59

win32prog
会员
注册时间: 2019-11-28
已发帖子: 138
积分: 138

离线

楼主 #4 2019-12-03 17:40:07

szchen2006
会员
注册时间: 2019-10-09
已发帖子: 216
积分: 166.5

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

win32prog 说:

emwin 仿的是 win32 的 api,

如果想收到 WM_PAINT 消息, 那么要调用 WM_InvalidateRect() 函数才行, 这样会重绘。

谢谢你的回复!

不过,我感觉好像是背景图把矩形给覆盖了,所以显示不出来。但我不知道怎么才能解决这个问题。

离线

#5 2019-12-04 08:28:00

Jmhh247
会员
注册时间: 2018-12-21
已发帖子: 262
积分: 262

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

楼主,你这个问题,最好把代码片断贴出来,好分析。。。


现在只能猜一下了:

1. 单独测试矩形是否能显示出来?
2. 单独显示背景图是否能显示出来?
3. WM_PAINT消息里面绘图,是有顺序的。
4. 以上都正常,先绘制背景图,再绘制矩形试试。

离线

#6 2019-12-04 08:39:08

Jmhh247
会员
注册时间: 2018-12-21
已发帖子: 262
积分: 262

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

在这个帖子里面-[[原创开源]emwin侧边导航框架支持按钮选中效果](https://whycan.cn/t_2922.html)

有画矩形的,圆角矩形,你也可看看

FluxBB bbcode 测试

离线

#7 2019-12-04 08:44:31

超级萌新
会员
注册时间: 2018-05-04
已发帖子: 408
积分: 407

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

楼上的界面做的漂亮^_^

离线

#8 2019-12-04 08:59:31

win32prog
会员
注册时间: 2019-11-28
已发帖子: 138
积分: 138

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

@Jmhh247 学习了, 优秀的UI设计师。

离线

楼主 #9 2019-12-05 09:21:24

szchen2006
会员
注册时间: 2019-10-09
已发帖子: 216
积分: 166.5

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

Jmhh247 说:

楼主,你这个问题,最好把代码片断贴出来,好分析。。。


现在只能猜一下了:

1. 单独测试矩形是否能显示出来?
2. 单独显示背景图是否能显示出来?
3. WM_PAINT消息里面绘图,是有顺序的。
4. 以上都正常,先绘制背景图,再绘制矩形试试。


感谢你的回复!

1.单独能显示出矩形框。
2.单独也能显示出背景图。
3.WM_PAINT里绘图顺序:
    GUI_SetBkColor(GUI_BLACK);
        GUI_SetColor(GUI_RED);
    GUI_Clear();
        GUI_DrawRect();
这样只能看到背景图,看不到画的矩形。不知道怎么回事。再次感谢!

不好意思,不知道怎么上传代码和图片。所以只能简写。

离线

楼主 #10 2019-12-05 09:39:58

szchen2006
会员
注册时间: 2019-10-09
已发帖子: 216
积分: 166.5

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

@Jmhh247
大佬,您好!再请教一个问题:我看了你做的界面,很漂亮。我发现我的界面要求和你的稍微有区别:我的窗口背景是一张图片。你的背景好像是颜色填充。这个区别是不是导致了我无法显示矩形呢?
还有,上面帖子里贴的代码不完整,重新贴在下面:
WM_PAINT:
    hImage=WM_GetDialogItem(hDlg, ID_IMAGE_0);
        IMAGE_SetBitmap(hImage,&bmbackground);

    GUI_SetBkColor(GUI_BLACK);
        GUI_SetColor(GUI_WHITE);
    GUI_Clear();

离线

#11 2019-12-05 09:51:22

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,191
积分: 9197

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!





离线

楼主 #12 2019-12-05 09:54:39

szchen2006
会员
注册时间: 2019-10-09
已发帖子: 216
积分: 166.5

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

谢谢晕哥的指导!

离线

#13 2019-12-05 11:05:26

Jmhh247
会员
注册时间: 2018-12-21
已发帖子: 262
积分: 262

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

Image控件我用的比较少,我也没有验证过你这种背景的做法是否正确。

emwin例程里面一般在WM_PAINT里,用GUI_DrawBitmap之类去绘制背景实现。


区别在于:
1. 你用的控件去做背景
2. 常规做法是用2D绘图做背景

不显示的原因,可能是你的控件挡住了2D绘图。

---

以上是我的推测,未经验证。








szchen2006 说:

@Jmhh247
大佬,您好!再请教一个问题:我看了你做的界面,很漂亮。我发现我的界面要求和你的稍微有区别:我的窗口背景是一张图片。你的背景好像是颜色填充。这个区别是不是导致了我无法显示矩形呢?
还有,上面帖子里贴的代码不完整,重新贴在下面:
WM_PAINT:
    hImage=WM_GetDialogItem(hDlg, ID_IMAGE_0);
        IMAGE_SetBitmap(hImage,&bmbackground);

    GUI_SetBkColor(GUI_BLACK);
        GUI_SetColor(GUI_WHITE);
    GUI_Clear();

离线

#14 2019-12-05 11:08:46

Jmhh247
会员
注册时间: 2018-12-21
已发帖子: 262
积分: 262

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

给你一个参考:

- 代码片断

    case WM_PAINT:

        // 背景
        GUI_DrawBitmap(&bmscar1, 0, 0);

        // 圆角矩形
        WM_GetClientRect(&rect);
        GUI_SetColor(GUI_GREEN);
        tmp = 10;
        GUI_SetPenSize(7);
        GUI_AA_DrawRoundedRect(rect.x0+tmp, rect.y0+tmp, rect.x1-tmp, rect.y1-tmp, 8);
        break;

- 效果截图
FluxBB bbcode 测试

离线

楼主 #15 2019-12-05 14:30:10

szchen2006
会员
注册时间: 2019-10-09
已发帖子: 216
积分: 166.5

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

@Jmhh247 谢谢你的指导!

现在可以了。

这里不能用IMAGE控件,可能是因为我的背景图充满了整个屏幕,把2D图形给挡住了。

参考了你的代码后,现在可以正常显示了。开始我把顺序搞错了:GUI_DrawBitmap() -> GUI_SetBkColor() -> GUI_SetColor() -> GUI_Clear() -> GUI_DrawRect() 这样可能把背景图给清除掉了,所以我只能看到键盘。后来,我按照你提供的参考代码的顺序修改了后就可以了:GUI_SetBkColor() -> GUI_SetColor() -> GUI_Clear() -> GUI_DrawBitmap() -> GUI_DrawRect() 。

再次谢谢大佬!

离线

#16 2019-12-05 15:29:52

myxiaonia
会员
注册时间: 2019-06-18
已发帖子: 76
积分: 49.5

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

wm_paint里能不能用控件,都不好说,我估计只能用基本图形库吧

离线

楼主 #17 2019-12-05 15:31:25

szchen2006
会员
注册时间: 2019-10-09
已发帖子: 216
积分: 166.5

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

myxiaonia 说:

wm_paint里能不能用控件,都不好说,我估计只能用基本图形库吧

从emWin的手册里能找到什么依据不?谢谢!

离线

#18 2022-11-09 17:09:14

Wyt2022
会员
注册时间: 2022-11-09
已发帖子: 1
积分: 1

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

@Jmhh247
大佬请问下,我这样绘制底图和圆弧后,我想要圆弧能够动态显示,但是会有一定时间的延迟,我感觉是因为绘制底图需要一定时间然后才执行圆弧的绘制,请问这个有办法解决吗

离线

#19 2022-11-10 11:54:06

dg
会员
注册时间: 2018-11-22
已发帖子: 38
积分: 91

Re: emWin中,在有背景图的对话框上绘制2D图形,2D图形无法显示,是什么原因呢?谢谢!

用法不对。画背景应该在 WM_EraseBkground 消息里面。(可能有错记不清了)
而不是在 wm_paint 里面。
这样保证背景只画一次,能提高速度。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn