none
自做的LineShape控件更新时重绘不正确的问题 RRS feed

  • 问题

  • 我原来做了一个需要引入Microsoft.VisualBasic.PowerPacks.Vs.dll的俄罗斯方块,其中很重要地用到了LineShape和RectangleShape类,在程序中表现一切正常,无不理想的效果。

    但是这样做有一个缺点,我希望让我的游戏更快地让大多数人玩到,但是我发现很多人的电脑上至多只安装了.NET Framework 4.0,并没有安装Visual Basic PowerPacks 10.0,所以布置起来比较繁杂!一个最好的解决方案显然就是自制一个LineShape和RectangleShape类。(虽然可以将这个dll一起发布,但是我还是希望可以自己封装一个)

    我的解决方法是这样的,在LineShape中使用传过来的Control的Graphics对象,然后有StartPoint和EndPoint两个属性,在每次属性改变时,便用Control.BackColor颜色删去原来的图象,再绘制新的图象;除此之外,再接受Control.Paint事件,每次产生事件时,便(不删去)绘制新的图像…

    			private void DeleteOldGraphic()
    			{
    				graph.DrawLine(orgPen, orgStart, orgEnd);
    			}
    			private void CreateNewGraphic()
    			{
    				var newPen = new Pen(this.color, width);
    				newPen.DashStyle = style;
    
    				graph.SmoothingMode = SmoothingMode.AntiAlias;
    				graph.DrawLine(newPen, start, end);
    				// org
    				orgPen = new Pen(this.parent.BackColor, width);
    				orgPen.DashStyle = style;
    				orgStart = start;
    				orgEnd = end;
    			}
    据我的分析,应该是orgPen = new Pen(this.parent.BackColor...不对,因为BackColor不一定就是真正的屏幕!
    • 已编辑 Flysha 2011年3月19日 5:56
    2011年3月17日 10:17

答案

全部回复