我在eimWin5.4中创建了一个对话框,然后给对话框设置了背景图片,接着我在这个对话框的回调函数的WM_PAINT消息里画一个矩形,却无法显示。请教一下大佬们,这是为什么呢?该怎么解决呢?十分感谢!
离线
emwin 仿的是 win32 的 api,
如果想收到 WM_PAINT 消息, 那么要调用 WM_InvalidateRect() 函数才行, 这样会重绘。
离线
离线
emwin 仿的是 win32 的 api,
如果想收到 WM_PAINT 消息, 那么要调用 WM_InvalidateRect() 函数才行, 这样会重绘。
谢谢你的回复!
不过,我感觉好像是背景图把矩形给覆盖了,所以显示不出来。但我不知道怎么才能解决这个问题。
离线
楼主,你这个问题,最好把代码片断贴出来,好分析。。。
现在只能猜一下了:
1. 单独测试矩形是否能显示出来?
2. 单独显示背景图是否能显示出来?
3. WM_PAINT消息里面绘图,是有顺序的。
4. 以上都正常,先绘制背景图,再绘制矩形试试。
离线
离线
楼上的界面做的漂亮^_^
离线
@Jmhh247 学习了, 优秀的UI设计师。
离线
楼主,你这个问题,最好把代码片断贴出来,好分析。。。
现在只能猜一下了:
1. 单独测试矩形是否能显示出来?
2. 单独显示背景图是否能显示出来?
3. WM_PAINT消息里面绘图,是有顺序的。
4. 以上都正常,先绘制背景图,再绘制矩形试试。
感谢你的回复!
1.单独能显示出矩形框。
2.单独也能显示出背景图。
3.WM_PAINT里绘图顺序:
GUI_SetBkColor(GUI_BLACK);
GUI_SetColor(GUI_RED);
GUI_Clear();
GUI_DrawRect();
这样只能看到背景图,看不到画的矩形。不知道怎么回事。再次感谢!
不好意思,不知道怎么上传代码和图片。所以只能简写。
离线
@Jmhh247
大佬,您好!再请教一个问题:我看了你做的界面,很漂亮。我发现我的界面要求和你的稍微有区别:我的窗口背景是一张图片。你的背景好像是颜色填充。这个区别是不是导致了我无法显示矩形呢?
还有,上面帖子里贴的代码不完整,重新贴在下面:
WM_PAINT:
hImage=WM_GetDialogItem(hDlg, ID_IMAGE_0);
IMAGE_SetBitmap(hImage,&bmbackground);
GUI_SetBkColor(GUI_BLACK);
GUI_SetColor(GUI_WHITE);
GUI_Clear();
离线
谢谢晕哥的指导!
离线
Image控件我用的比较少,我也没有验证过你这种背景的做法是否正确。
emwin例程里面一般在WM_PAINT里,用GUI_DrawBitmap之类去绘制背景实现。
区别在于:
1. 你用的控件去做背景
2. 常规做法是用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();
离线
给你一个参考:
- 代码片断
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;
- 效果截图
离线
@Jmhh247 谢谢你的指导!
现在可以了。
这里不能用IMAGE控件,可能是因为我的背景图充满了整个屏幕,把2D图形给挡住了。
参考了你的代码后,现在可以正常显示了。开始我把顺序搞错了:GUI_DrawBitmap() -> GUI_SetBkColor() -> GUI_SetColor() -> GUI_Clear() -> GUI_DrawRect() 这样可能把背景图给清除掉了,所以我只能看到键盘。后来,我按照你提供的参考代码的顺序修改了后就可以了:GUI_SetBkColor() -> GUI_SetColor() -> GUI_Clear() -> GUI_DrawBitmap() -> GUI_DrawRect() 。
再次谢谢大佬!
离线
wm_paint里能不能用控件,都不好说,我估计只能用基本图形库吧
离线
wm_paint里能不能用控件,都不好说,我估计只能用基本图形库吧
从emWin的手册里能找到什么依据不?谢谢!
离线
@Jmhh247
大佬请问下,我这样绘制底图和圆弧后,我想要圆弧能够动态显示,但是会有一定时间的延迟,我感觉是因为绘制底图需要一定时间然后才执行圆弧的绘制,请问这个有办法解决吗
离线
用法不对。画背景应该在 WM_EraseBkground 消息里面。(可能有错记不清了)
而不是在 wm_paint 里面。
这样保证背景只画一次,能提高速度。
离线