【问题标题】:map maker application地图制作应用程序
【发布时间】:2013-03-26 02:38:38
【问题描述】:

我创建了一个比较完整的应用程序,它允许我创建地图(包含地图所有点信息的 .txt 文件)、加载并绘制它。

我对此的解决方案是,在 windows 窗体应用程序中,放置一个面板(因为我需要能够在地图上移动)和该面板图片框内(因为我想在它们上放置背景图像和图像)表示大小为 50x50 像素的地图点。我现在面临的问题是我的应用程序的加载时间增加了,因为我正在将图片加载到图片框中......

对于我一直在尝试的方法,是否有人有任何替代建议? 视觉表示可能会有所帮助:

按要求提供的代码:(嗯,其中一些)

    private void Load_Map()
    {
        for (int i = Y - 12; i < Y + 12; i++)
        {
            if ((i >= 0) & (i < Int32.Parse(MP.Mheight)))
            {
                string Line = xline[i];
                for (int j = X - 12; j < X + 12; j++)
                {
                    if ((j >= 0) & (j < Int32.Parse(MP.Mwidth)))
                    {
                        int X = i * Int32.Parse(MP.Mwidth) + j;
                        int Z = Int32.Parse(Line[j].ToString());
                        Map_Location[X] = Z;

                        Color H = new Color();
                        Map_Point(j, i, Map_Height(Z, H), 50);
                    }
                }
            }
        }
    }

创建点:

    private void Map_Point(int X, int Y, Color H, int Point_Size)
    {
        PictureBox MP = new PictureBox();
        MP.Name = Map_Coordinates(X, Y);
        MP.Size = new Size(Point_Size, Point_Size);
        MP.Location = new Point(Y * (Point_Size + 1) + 4, X * (Point_Size + 1) + 4);
        MP.BackColor = H;

        Control MW = this.Controls["WorldMap"];
        MW.Controls.Add(MP);

    }

【问题讨论】:

  • 您介意分享您用于将图片加载到图片框中的代码吗?在不知道您已经尝试过什么的情况下,很难提供替代解决方案。
  • Does anyone have any alternative suggestion to what I have been attempting? - 是的,我愿意,切换到 WPF。 winforms 太慢太蹩脚,在做任何图形密集型的事情时需要一堆技巧。
  • tnw 有很多代码,但我肯定会分享...@HighCore 我会研究一下 :)

标签: c#


【解决方案1】:

您最好通过从System.Windows.Forms.Control 派生并覆盖OnPaint 方法并自己进行绘图和处理点击事件来创建自定义控件。

以您的方式使用大量 WinForms 控件是一种痛苦的练习,因为 WinForms 将为每个控件创建一个 hWnd 对象,不幸的是,WinForms 不能很好地扩展。

【讨论】:

  • +1 表示WinForms doesn't scale too well。 winforms 甚至无法扩展。
  • 我明白了,也许还有更多关于此的信息?还是我应该自己寻找指南? :P
  • 情况真的很糟糕 - WPF 非常适合数据绑定、分辨率独立和流畅的动画,但启动性能和与父操作系统的 UI 凝聚力很差,而 WinForms 是 Fl​​icker-ville 和动画是痛苦的。为什么微软不发布 DirectUI? :(
  • @Dai 我不确定你所说的 UI 凝聚力和所有这些东西是什么意思,但几天前我看到这个人发布了一个关于一个 10k x 10k 大小的 WPF 应用程序的答案,其中包含数千个控件支持鼠标和触控。这是一个飞机驾驶舱模拟器。
  • @AntonioTehSumtin 这不是我所说的“规模”——在这种情况下,“规模”是指平台或框架处理大量数据或实例的能力。具体来说,如果您想在一个窗体中拥有超过 100 个控件,WinForms 往往会窒息,而且非常嵌套的控件也不会很好地发挥作用。
【解决方案2】:

你应该使用System.Drawing.Graphics

这里是它的MSDN Tutorials

它有一个名为 DrawImage 的方法,您可以使用它来代替图片框。对于网格,您应该将其绘制为一个矩形,并使用背景颜色和垂直/水平线来制作网格。

【讨论】:

  • 网格只是图像之间的空白空间,我会研究教程,但更重要的是,一旦我这样做了,我可以在创建的图像上绘制吗?
猜你喜欢
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 2016-04-01
  • 1970-01-01
  • 2013-05-31
  • 1970-01-01
  • 2011-08-05
相关资源
最近更新 更多