我在eimWin5.4中创建了一个对话框,然后给对话框设置了背景图片,接着我在这个对话框的回调函数的WM_PAINT消息里画一个矩形,却无法显示。请教一下大佬们,这是为什么呢?该怎么解决呢?十分感谢!
离线
emwin 仿的是 win32 的 api,
如果想收到 WM_PAINT 消息, 那么要调用 WM_InvalidateRect() 函数才行, 这样会重绘。
谢谢你的回复!
不过,我感觉好像是背景图把矩形给覆盖了,所以显示不出来。但我不知道怎么才能解决这个问题。
离线
楼主,你这个问题,最好把代码片断贴出来,好分析。。。
现在只能猜一下了:
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();
离线
谢谢晕哥的指导!
离线
@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里能不能用控件,都不好说,我估计只能用基本图形库吧
从emWin的手册里能找到什么依据不?谢谢!
离线