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

在头文件定义了一个CStatic类的对象2.在Oncreate()函数里面3.在Onpaint()函数里面,在static控件里面画了一根直线但是有一种很奇怪的现象刚开始... 在头文件定义了一个CStatic类的对象

2.在Oncreate()函数里面

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

但是有一种很奇怪的现象
刚开始出现窗口的时候,那个直线不出现

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

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

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

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

如果答案满意的话 ,还可以追加分的。
展开
 我来答
ljt20061908
2013-11-12 · TA获得超过1033个赞
知道小有建树答主
回答量:527
采纳率:87%
帮助的人:200万
展开全部

图层叠加的问题吧!你建立的是单文档视图,在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()就行了。
锁骨的鱼
2013-11-12 · 超过29用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:51.7万
展开全部
设置风格 把控制置在最前 前面那个方形的背景是什么?
增加VIEW风格WS_CLIPCHILDREN
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式