(来自百度知道)c/c++ VC++ MFC 关于在Static 控件里面作图的问题 详见问题补充,希望能留下QQ,交流一下

  1. 在头文件定义了一个CStatic类的对象

2.在Oncreate()函数里面

3.在Onpaint()函数里面,在static控件里面画了一根直线

但是有一种很奇怪的现象

刚开始出现窗口的时候,那个直线不出现

但是我在拉动窗口的边框,改变窗口大小的时候,直线会出现

但是,更奇怪的现象就是最大化的时候,然后取消最大化的时候,直线又消失了

 

还请知道的人吱个声啊,我可以把代码发送过来的。

 

自己思考了下,有可能是MoveWindow的问题,但是注释掉MoveWindow之后,会出现一部分直线被覆盖的现象,思考有可能是static控件会覆盖住作图的部分?不知道有没有朋友遇到过这种情况

 



提问者采纳

图层叠加的问题吧!你建立的是单文档视图,在view中又添加了一个CStatic,此static属于view的一个局部窗口,而你在view的OnPaint中画图,也就是当view发现需要重绘时才会在重绘,而且在OnPaint中你获得的是static的DC,在此DC中画,也就是以static的坐标绘制,绘制以后你又移动static,移动static后,当系统发现有地方被覆盖了需要重绘,又会调用static的WM_PAINT消息,所以才会产生这么多的问题(可能我还解释的不全也不完全对,你斟酌着看),我一般会这样处理:

  1. 在view的OnPaint中,用view的dc画,得到static的相对与view的坐标,以此坐标为原点坐标画想在static中绘制的图像。

  2. 自定义一个类CMyStatic继承自CStatic,重写其WM_PAINT消息,在其消息处理函数中绘制我想在此控件中绘制的图像,在view中创建的CStatic就是我自定义的类了。

追问
嗯 第二种方法我试过,但是有一个问题,就是我这个static控件窗口要随父窗口的大小的变化而变化,这一点怎么实现?能不能加下我球球 四四二三五五五七二
回答
重写view的WM_SIZE消息,在此消息的处理函数中static.MoveWindow()就行了。
提问者评价
谢谢!

如果答案满意的话 ,还可以追加分的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值