硬汉嵌入式论坛

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

[μCGUI] 做按下按钮切换背景的实验,按下按钮后窗口不能进行重绘,求解答疑问

[复制链接]

17

主题

107

回帖

158

积分

初级会员

迎风而舞,扶摇直上九万里。

积分
158
发表于 2015-3-31 17:23:22 | 显示全部楼层 |阅读模式
做第33期的按下按钮切换背景颜色的实验,串口打印ucBkColor变量确实变了,将窗口设置为无效窗口后却没有进行重绘,求指点迷津
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107517
QQ
发表于 2015-3-31 21:47:17 | 显示全部楼层
代码发上来,我试试。
回复

使用道具 举报

17

主题

107

回帖

158

积分

初级会员

迎风而舞,扶摇直上九万里。

积分
158
 楼主| 发表于 2015-4-1 11:46:10 | 显示全部楼层
UCGUI.rar (4 KB, 下载次数: 92)    我的是UCGUI没有带操作系统,Codes是用builder生成的代码,在主函数中调用生成对话框的函数,然后在主函数while中调用UGI_Exec().我的工程没有剪裁太大了,我只把用builder生成的代码和主函数上传了. 硬汉麻烦了
回复

使用道具 举报

17

主题

107

回帖

158

积分

初级会员

迎风而舞,扶摇直上九万里。

积分
158
 楼主| 发表于 2015-4-1 11:46:37 | 显示全部楼层

回 eric2013 的帖子

eric2013:代码发上来,我试试。 (2015-03-31 21:47) 
我上传了,帮我看一下吧,谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107517
QQ
发表于 2015-4-1 16:14:38 | 显示全部楼层
这里改一下:WM_InvalidateWindow(hw1);
这里不能是对话框的句柄,这里得是WM_InvalidateWindow(WM_GetClientWindow(hw1));
回复

使用道具 举报

17

主题

107

回帖

158

积分

初级会员

迎风而舞,扶摇直上九万里。

积分
158
 楼主| 发表于 2015-4-1 16:36:01 | 显示全部楼层

回 eric2013 的帖子

eric2013:这里改一下:WM_InvalidateWindow(hw1);
这里不能是对话框的句柄,这里得是WM_InvalidateWindow(WM_GetClientWindow(hw1)); (2015-04-01 16:14) 
硬汉,谢谢,非常感谢。问题解决,困扰了我三天的问题,可能是我的基础不牢就想飞吧
回复

使用道具 举报

336

主题

2045

回帖

3058

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3058
发表于 2015-4-1 17:02:41 | 显示全部楼层

回 eric2013 的帖子

eric2013:这里改一下:WM_InvalidateWindow(hw1);
这里不能是对话框的句柄,这里得是WM_InvalidateWindow(WM_GetClientWindow(hw1)); (2015-04-01 16:14) 
很好奇,为什么呢? WM_GetClientWindow(hw1)

对话框也是窗口啊,很多API以WM_开头的都是可以直接用对话框,或者控件句柄的啊?
回复

使用道具 举报

17

主题

107

回帖

158

积分

初级会员

迎风而舞,扶摇直上九万里。

积分
158
 楼主| 发表于 2015-4-1 17:29:53 | 显示全部楼层

回 eric2013 的帖子

eric2013:这里改一下:WM_InvalidateWindow(hw1);
这里不能是对话框的句柄,这里得是WM_InvalidateWindow(WM_GetClientWindow(hw1)); (2015-04-01 16:14) 
有点疑问,再麻烦您一下,hw1是创建的对话框的句柄:
1、我首先用WM_InvalidateWindow(hWin);这个函数使窗口无效不能进行窗体的重绘  ,为什么你那个直接调用WM_InvalidateWindow(hWin);可以进行重绘呢?
/2、我在调用WM_InvalidateWindow(hWin);不能进行重绘后才尝试调用WM_InvalidateWindow(hw1); 想用这个函数直接使对话框窗口直接无效进行重绘——失败。假如WM_InvalidateWindow(hWin);只能对客户区进行重绘,调用WM_InvalidateWindow(hWin)和WM_InvalidateWindow(hw1)进行重绘失败可以理解,我创建的对话框有标题和边框,您那个也有标题和边框,那又回到了第一个问题为什么您调用WM_InvalidateWindow(hWin)这个函数好使,我的不行呢


void _cbCallback(WM_MESSAGE * pMsg)
{
    int NCode, Id;
    WM_HWIN hWin = pMsg->hWin;
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107517
QQ
发表于 2015-4-1 21:28:55 | 显示全部楼层

回 caicaptain2 的帖子

caicaptain2:很好奇,为什么呢? WM_GetClientWindow(hw1)

对话框也是窗口啊,很多API以WM_开头的都是可以直接用对话框,或者控件句柄的啊? (2015-04-01 17:02) 
有区别的,对话框是由客户区和title等部件组成的,而客户区才是正真的窗口。这个你可以看下手册对话框章节,有一个专门的说明。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107517
QQ
发表于 2015-4-1 21:31:30 | 显示全部楼层

回 业未央 的帖子

业未央:有点疑问,再麻烦您一下,hw1是创建的对话框的句柄:
1、我首先用WM_InvalidateWindow(hWin);这个函数使窗口无效不能进行窗体的重绘  ,为什么你那个直接调用WM_InvalidateWindow(hWin);可以进行重绘呢?
/2、我在调用WM_InvalidateWindow(hWin);不能进行重绘后才尝试 .. (2015-04-01 17:29) 
使用对话框的时候一定要要获取下客户区再操作,防止意外。而使用窗口的时候直接使用WM_InvalidateWindow(hWin);是没有问题的。
回复

使用道具 举报

17

主题

107

回帖

158

积分

初级会员

迎风而舞,扶摇直上九万里。

积分
158
 楼主| 发表于 2015-4-2 09:05:09 | 显示全部楼层

回 eric2013 的帖子

eric2013:使用对话框的时候一定要要获取下客户区再操作,防止意外。而使用窗口的时候直接使用WM_InvalidateWindow(hWin);是没有问题的。 (2015-04-01 21:31) 
33.5节那个例子,我看你那上边也是建立的对话框而且没有获取客户区,直接调用的使窗口无效
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107517
QQ
发表于 2015-4-2 17:14:39 | 显示全部楼层

回 业未央 的帖子

业未央:33.5节那个例子,我看你那上边也是建立的对话框而且没有获取客户区,直接调用的使窗口无效 (2015-04-02 09:05) 
好的,我看看,估计是个bug
回复

使用道具 举报

17

主题

107

回帖

158

积分

初级会员

迎风而舞,扶摇直上九万里。

积分
158
 楼主| 发表于 2015-4-3 11:29:03 | 显示全部楼层

回 eric2013 的帖子

eric2013:好的,我看看,估计是个bug (2015-04-02 17:14) 
好的,你看一下
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-4 11:32 , Processed in 0.203682 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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