问题描述
实际问题是我要做一个小人,在地图上走,下面的PICTUREBOX在动。。。我把上面的PICTUREBOX改成TRANSPARENT后没用,他貌似是对于FORM1的底色进行透明。。如何做,急阿。
解决方案
解决方案二:
那就同同一个控件,让那个小人动起来就完了。重写OnPaint事件。
解决方案三:
看看这个方法行不行.
解决方案四:
下面的控件每次改变后刷新一下上面的控件。
解决方案五:
引用1楼hikaliv的回复:
那就同同一个控件,让那个小人动起来就完了。重写OnPaint事件。
不是很明白。。。。。。没有学过额。。我对这个是超级新手额,没有系统学过,完全自己在摸索(因为老师布置的课程项目要我们自己搞个小游戏,但是他从没讲过任何关于窗体设计的东西)。。。我做了个RPG,现在人物行走的时候是下面一张比FORM更大尺寸的地图在上下左右移,上面小人一直在画面中间走。。。。。
解决方案六:
引用3楼cnzdgs的回复:
下面的控件每次改变后刷新一下上面的控件。
这个我想过。。。上面的底色根本不是下面的PICTUREBOX啊。。。是FORM的底色。。。
解决方案七:
引用4楼hry1225的回复:
引用1楼hikaliv的回复:那就同同一个控件,让那个小人动起来就完了。重写OnPaint事件。不是很明白。。。。。。没有学过额。。我对这个是超级新手额,没有系统学过,完全自己在摸索(因为老师布置的课程项目要我们自己搞个小游戏,但是他从没讲过任何关于窗体设计的东西)。。。我做了个RPG,现在人物行走的时候是下面一张比FORM更大尺寸的地图在上下左右移,上面小人一直在画面中间走。。。。。
我觉得你现在这种想法太好了。按理说……你上面的给透明后,怎么可能是FORM是底色呢……不是也不管了,反正你现在的想法挺好。最好的方法就是ONPAINT了。你查一下MSDN就完了,就是OVERRIDE一下那个PROTECTED方法。每个控件都有的。你在这个方法中画上这个小人和底图就可以了。
解决方案八:
重载OnPaint方法:protectedoverridevoidOnPaint(PaintEventArgse)pictureBox1.Invalidate();
解决方案九:
引用3楼cnzdgs的回复:
下面的控件每次改变后刷新一下上面的控件。
我尝试过了。。。我把PICTUREBOX1的背景改成地图。。。然后把PICTUREBOX2放在1里面。。。就成了。。。。但是。。。。运行起很卡很卡。。不停在重绘吧。。。那张地图的PNG文件3M。。。
解决方案十:
引用8楼hry1225的回复:
引用3楼cnzdgs的回复:下面的控件每次改变后刷新一下上面的控件。我尝试过了。。。我把PICTUREBOX1的背景改成地图。。。然后把PICTUREBOX2放在1里面。。。就成了。。。。但是。。。。运行起很卡很卡。。不停在重绘吧。。。那张地图的PNG文件3M。。。
不要不停的重绘,降低一下频率,发生改变时,才刷新改变的部分,同时使用双缓冲画背景
解决方案十一:
每次改变后刷新一下,不要在Paint事件中刷新。
解决方案十二:
我不懂C++但你可以这样考虑PictureBox1里添加PictureBox2这样PictureBox2就可以透明了WINDOWS里透明是对于父窗体的。而不是同级窗体
解决方案十三:
因为一些关联代码的缘故(地图障碍,我全是用这2个PICTUREBOX完成的)。。。我现在不想动这2个图片框,有没有办法实现透明??我前面看书,发现一个办法,尝试了下,就是不停截取与第2个图片框重叠部分的第一个图片框里的象素把他整合起作为第1个图片框的BACKCOLOR,但是发现运气来超卡。。。。。
解决方案十四:
引用12楼hry1225的回复:
因为一些关联代码的缘故(地图障碍,我全是用这2个PICTUREBOX完成的)。。。我现在不想动这2个图片框,有没有办法实现透明??我前面看书,发现一个办法,尝试了下,就是不停截取与第2个图片框重叠部分的第一个图片框里的象素把他整合起作为第1个图片框的BACKCOLOR,但是发现运气来超卡。。。。。
卡是因为需要不断的重绘……MFC我不知道,但像WINFORM和WPF,透明的做法是再在上面绘制一个临时图层,用透明的底色把该透明的部分给画上去。但是像在WIN7下,WPF的这一过程用到了硬件加速,因此性能上已经不再是问题。尽管在WIN7以前,都会是软件加速,但是效果上也没有什么不爽的感觉。你这种“覆盖”的想法是对的。但是你可能需要用双缓冲来绘图,并在缓冲里面进行优化(比如说在绘往UI之前,数据又发生了较大的变化,那么就处理变化,将变化后的再输出到UI上),以减少UI层的更新操作。我不知道你是否用到了双缓冲,八成是没有,没有的话,每画一点都要阻塞一下UI线程,卡那是必然的。双缓冲的话,BAIDU一下,明明白白。
解决方案十五:
this->pictureBox1->BackColor=System::Drawing::Color::Transparent;this->pictureBox2->BackColor=System::Drawing::Color::Transparent;this->pictureBox1->Parent=this->pictureBox2