9200|20

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WinCE的对话框画一张位图作为背景,在画背景的那会会导致子控件的位置变成白色的问题?? [复制链接]

void CTestPmpButtonDlg::OnPaint()
{
        CPaintDC dc(this); // device context for painting
       
        RedrawPmpDialog(dc.m_hDC);
       
        // Do not call CTestPmpBasicDlg::OnPaint() for painting messages
}
上面是对话框类的画背景代码,用单步执行,在模拟器中按F10执行RedrawPmpDialog这句,执行完后会导致子控件的位置变成白色,如果机器速度比较慢或我要执行比较复杂的操作,这个白色的背景会持续较长的时间,同样的代码在VC下操作,则会用背景图盖住子控件的位置,这样如果机器速度比较慢或我要执行比较复杂的操作,看到的是背景,还容易接受些.

大家应该都碰到类似问题,只是或许没关注而已,不知道大家有啥好解决办法没有?

最新回复

double buffer can avoid this issue. please try as the iidioter said.  详情 回复 发表于 2008-7-9 11:29
点赞 关注

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
如果不单步呢?也会白吗?嵌入式平台的运算能力本来就不如PC的,处理图形视频等的时候还是需要考虑到这个因素的。
为什么不在Init Dialog时直接画好再Show出来呢?为什么要动态去画?
 
 

回复

91

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
不单步执行也是会白的,只是很快被刷新了,但还是可以感觉到闪的,我就是后台播放视频,然后切换程序才注意到这个现象的
在Init Dialog时画好再Show出来,这个问题也是一样存在的,我说动态画只是想把问题弄简单点

大家可以试试就知道了
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

4
 
恩,你的算法决定了这个问题的存在,靠每次刷新来显示背景,这个闪是必然存在的,这主要决定于你机器的速度和正在执行程序的复杂性,播放视频本身就是要占用大量CPU去解码,这时突然刷屏,肯定有延迟的,好像没有办法了。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

5
 
把默认画刷改为NULL
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
楼上的,如何把默认画刷改为NULL??
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

7
 
不知道阁下有啥更好的算法没有?
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
试试
WM_ERASEBKGND
时把背景设为透明什么的
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

9
 
楼上的,不行,我试了,执行RedrawPmpDialog这句话时,按钮控件并没有收到WM_ERASEBKGND消息,
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

10
 
我只希望在执行RedrawPmpDialog这句话时,显示的是整个都是背景,就是背景把按钮盖住,然后轮到按钮画的时候再画,类似Window的做法,不知道能否做到,我感觉设置某个属性应该可以做到.
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(中级)

11
 
重写虚函数OnCtlColor,把返回的画刷弄成NULL试试.
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

12
 
楼上的,OnCtlColor是在主对话框弄成NULL还是在按钮窗口做?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

13
 
to xiaoguanglee:

不行,我把两个都弄成NULL,还是不行
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

14
 
我感觉这是父窗口和子窗口重画的先后顺序的机制和覆盖的问题,这里有微软的工程师吗?能否帮问下这个问题?? 谢谢啦
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

15
 
在注册窗口时有一个叫背景色的句柄,把它设置为NULL就OK
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

16
 
楼上的,注册窗口时? 在那个函数可以修改,能否讲仔细点,谢谢
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

17
 
注册窗口是指在RegisterClass的时候,一般用API写程序才会去写这段代码.LZ是基于对话框的MFC程序话,可以试着在InitDialog的时候为DC选入一个NULL_BRUSH画刷,然后可以试下勾选父窗口的CLIP CHILDREN风格,试试能不能解决问题
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

18
 
如果LZ是基于对话框的MFC程序话,可以首先把对话框和控件的visible设置为为不可见的,然后在OnInitDialog中先ShowWindow窗口,然后再UpdateWindow然后再Show控件,这样就不会有空白了,但是有可能会看到控件闪烁的问题。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

19
 
把RedrawPmpDialog贴出来看看
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

20
 

ATL??WTL??
我一般只用SDK,没有发现这个问题.

WM_CTLCOLOREDIT可以看看这个消息里面的那组消息,那几个控件是要在父窗口中才能处理背景色的.

如果还有闪屏问题的话,可以用双缓冲来解决这个问题.

网上应该有示例.
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表