硬汉嵌入式论坛

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

[emWin] 关于emwin问题

[复制链接]

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 2019-12-4 14:31:48 | 显示全部楼层 |阅读模式
各位好!我想请问一下  在一个窗口内绘制多个矩形(GUI_FillRect)绘画, 我想刷新其中一个矩形内容(背景颜色之类) 其他区域要保持不变,如何实现?

回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2019-12-4 17:25:01 | 显示全部楼层
GUI_SetColor(GUI_RED);  GUI_FillRect(0, 0, 127, 63);  GUI_SetColor(GUI_GREEN);  GUI_FillRect(0, 64, 127, 127);
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2019-12-4 17:26:33 | 显示全部楼层
GUI_SetColor(GUI_RED);  GUI_FillRect(0, 0, 127, 63);  GUI_SetColor(GUI_GREEN);  GUI_FillRect(0, 64, 127, 127);单独更改一个矩形的颜色
回复

使用道具 举报

5

主题

95

回帖

110

积分

初级会员

积分
110
发表于 2019-12-4 19:00:22 | 显示全部楼层
一种很笨的方法,加全局变量,发送重绘消息
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2019-12-4 19:53:55 | 显示全部楼层
万物有生大法 发表于 2019-12-4 17:26
GUI_SetColor(GUI_RED);  GUI_FillRect(0, 0, 127, 63);  GUI_SetColor(GUI_GREEN);  GUI_FillRect(0, 64,  ...

可以看教程这个章节
http://www.armbbs.cn/forum.php?mod=viewthread&tid=19834&extra=page%3D1
QQ截图20191204195522.jpg
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2019-12-5 09:18:53 | 显示全部楼层
万物有生大法 发表于 2019-12-4 17:26
GUI_SetColor(GUI_RED);  GUI_FillRect(0, 0, 127, 63);  GUI_SetColor(GUI_GREEN);  GUI_FillRect(0, 64,  ...

你好 ,我知道你说的这样的方法,我先说说的现在的问题吧,我在外部传入了一个结构体数据,这个结构体包含了我要创建的WIN窗口的坐标,大小,颜色,回调等,其中还有一个需要绘画的矩形的结构体数据,里面也包括了坐标,大小,背景色等,通过指针数组保存矩形数据,然后我通过WM_PAINT,把矩形数据进行绘画。通过WM_TOUCH获取坐标来二次绘画。现在的问题是二次绘画的时候会把之前的矩形给清掉了,举个例子吧。就在WIN窗口中有矩形1,矩形2,矩形3,第一次绘画这三个矩形都绘画出来了,第二次我点击矩形1的区域时,重新绘画矩形1,但是矩形2和矩形3就没有了。所以我想问的是如何重绘矩形1,但是矩形2,矩形3保持不变。
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2019-12-5 09:22:22 | 显示全部楼层
xiaomeng 发表于 2019-12-4 19:00
一种很笨的方法,加全局变量,发送重绘消息

你好 首先谢谢你的回答,如果用WM_Paint()重绘的话是整个WIN窗口重绘,但是我想要的是WIN窗口中局部重绘,为什么要这样重绘,是因为我这里跑的是单片机,如果都是整个窗口重绘,刷新效果不好。
回复

使用道具 举报

9

主题

140

回帖

187

积分

初级会员

积分
187
QQ
发表于 2019-12-5 11:31:07 | 显示全部楼层
使用一种控件进行重绘,LABEL,BUTTON都可以,在这个控件的重绘里面想怎么画就怎么画,而又不需要考滤如何重绘矩形1,但是矩形2,矩形3保持不变的问题,比如控件重绘里面使用控件属性的bkColor做为你矩形的颜色,改颜色时只要使用控件的setBkColor函数就搞定了
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2019-12-5 14:42:42 | 显示全部楼层
allyzc 发表于 2019-12-5 11:31
使用一种控件进行重绘,LABEL,BUTTON都可以,在这个控件的重绘里面想怎么画就怎么画,而又不需要考滤如何 ...

你好,谢谢!
如果用控件的话这是没问题的
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2019-12-5 14:48:18 | 显示全部楼层
allyzc 发表于 2019-12-5 11:31
使用一种控件进行重绘,LABEL,BUTTON都可以,在这个控件的重绘里面想怎么画就怎么画,而又不需要考滤如何 ...

你好,谢谢,
如果用控件的话,重绘不需要考虑我那些问题了,因为每一个控件都有一个句柄,我可以通过句柄来操作。但是我现在用的是在当前WIN窗口使用GUI_FillRect绘画矩形,然后通过GUI_SetColor绘制颜色等等,这样我就没有子句柄了,这样的我只能对hWin进行重绘了。
回复

使用道具 举报

354

主题

2164

回帖

3231

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3231
发表于 2019-12-5 16:34:16 | 显示全部楼层
在路上的程序猿 发表于 2019-12-5 14:48
你好,谢谢,
如果用控件的话,重绘不需要考虑我那些问题了,因为每一个控件都有一个句柄,我可以通过句 ...

有个函数,可以invalidate某个局部区域。
WM_InvalidateArea()    Invalidates a certain section of the display.
WM_InvalidateRect()    Invalidates a part of a window.
WM_InvalidateWindow()    Invalidates a window.
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-18 12:28 , Processed in 0.343676 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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