问题描述
我现在再做一个项目,有个要求是要将窗体做成有3d效果的房间;所以我打算将窗体分成几部分,然后加载不同的图片(如墙,地板,分别用不同的图片),拼凑起来,实现3d的效果;不知道怎么怎样将窗体分成几部分,然后加载不同的图片。请大家指教
解决方案
解决方案二:
建议用flash来做js的话要看图形规不规则不规则的话可能要用点阵可以参考那些js游戏
解决方案三:
重载OnPaint函数中自己画就行了,需要你自己根据窗体客户区计算每个图片的位置和大小也可以重载话窗体背景的函数去画图片,画图不难,查下MSDN很快就能搞定。
解决方案四:
呵呵,但是我的图片不规则,计算位置因为很困难吧,还有我画出来以后,需要随时修改,可以实现吗?
解决方案五:
我用的是c#哈
解决方案六:
图片不规则??有非矩形的图片么?(只有那种支持透明色的图片)思路是:例如,窗体有上、左、右三张图片ImageimgLeft;ImageimgTop;ImageimgRight;代码给你参考下publicpartialclassForm2:Form{privateImageimgLeft;privateImageimgTop;privateImageimgRight;publicForm2(){InitializeComponent();imgLeft=Image.FromFile("");imgTop=Image.FromFile("");imgRight=Image.FromFile("");}privatevoidDrawImage(Graphicsg){Rectanglerect=newRectangle();//这里计算imgLeft的rectg.DrawImage(imgLeft,rect);//这里计算imgTop的rectg.DrawImage(imgTop,rect);//这里计算imgRight的rectg.DrawImage(imgRight,rect);}protectedoverridevoidOnPaint(PaintEventArgse){base.OnPaint(e);DrawImage(e.Graphics);}privatevoidbutton1_Click(objectsender,EventArgse){//操作imgLeft、imgTop、imgRight改变图像Invalidate();//强制重绘(可以传一个Rectangle区域,告诉它只重绘改变区域,提高效率)//这样背景图就马上变量}}
解决方案七:
我其实是想将一个窗体分割成房间顶,房间低,四面墙,然后对这几部分区域填充不同的颜色或者图片,就会形成3D效果。我需要的不是规则的矩形哈,其实是一个五边形,谢谢楼上的,给我提供了一种思路。我的做法:我重载了protectedoverridevoidOnPaint(PaintEventArgse){base.OnPaint(e);AddPathExample(e);}privatevoidAddPathExample(PaintEventArgse){PenmyPen=newPen(Color.Black,2);//Createthefirstpathrightsideuptriangle.Point[]myArray={newPoint(00,00),newPoint(200,200),newPoint(400,200),newPoint(600,00),newPoint(00,00),};GraphicsPathmyPath=newGraphicsPath();myPath.AddLines(myArray);PictureBoxmypic=newPictureBox();mypic.BackColor=Color.FromArgb(123,0,234);mypic.Region=newRegion(myPath);//this.Controls.Add(mypic);e.Graphics.DrawPath(myPen,myPath);//Createthesecondpathinvertedtriangle.Point[]myArray2={newPoint(600,00),newPoint(400,200),newPoint(400,400),newPoint(600,600),newPoint(600,00),};GraphicsPathmyPath2=newGraphicsPath();myPath2.AddLines(myArray2);PictureBoxmypic1=newPictureBox();mypic1.BackColor=Color.FromArgb(23,0,24);mypic1.Region=newRegion(myPath2);this.Controls.Add(mypic1);//myPath.FillMode=FillMode.e.Graphics.DrawPath(myPen,myPath2);Point[]myArray3={newPoint(0,600),newPoint(200,400),newPoint(400,400),newPoint(600,600),newPoint(0,600),};GraphicsPathmyPath3=newGraphicsPath();myPath3.AddLines(myArray3);e.Graphics.DrawPath(myPen,myPath3)Point[]myArray4={newPoint(0,600),newPoint(200,400),newPoint(200,200),newPoint(00,00),newPoint(0,600),};GraphicsPathmyPath4=newGraphicsPath();myPath3.AddLines(myArray4);e.Graphics.DrawPath(myPen,myPath4);Point[]myArray5={newPoint(200,200),newPoint(400,200),newPoint(400,400),newPoint(200,400),newPoint(200,200),};GraphicsPathmyPath5=newGraphicsPath();myPath5.AddLines(myArray5);e.Graphics.DrawPath(myPen,myPath5);//Addthesecondpathtothefirstpath.myPath.AddPath(myPath2,true);//Drawthecombinedpathtothescreen.e.Graphics.DrawPath(myPen,myPath);}然后用GraphicsPath得到一个特定区域,用线画出了特定区域,但是还不能加载图片。本来打算用PictureBox将得到的myPath赋给mypic.Region,但是发现好像画出的picturebox大小不对,变得很小。我打算用楼上提供的方法实施哈。
解决方案八:
上面的代码已经将窗体分成了5个区域myPathmyPath1myPath2myPath3myPath4,那位再给我点建议,怎样在这些去区域加载图片呢
解决方案九:
画图方面俺还是空白,帮你顶一个吧
解决方案十:
你可以用第三方控件做啊,比如 DotNetBar
解决方案十一:
DotNetBar是什么东西啊?没用过,那位知道的,说说,请结合我的要求
解决方案十二:
看你的需求,使用WindowsForms来做肯定是十分困难的。建议用WPF来做界面,使用VisualStudio2008.WPF做3D效果要好一些,但是执行效率仍然不够高。有条件的话,用DirectX或者OpenGL来做是最可靠的。不过任何做法,都复杂的可以写一本书了。
解决方案十三:
直接做一个3D效果的图片放在Form中不是简单,你图片都有了,拼起来就是一个3D效果了!
解决方案十四:
画图的过程中不要用窗体,比如说PictureBox。窗体是一种有父窗体,有边缘大小,能够响应鼠标事件的东西。
解决方案十五:
up
解决方案:
up
解决方案:
up`````````````````