this.Region Path数据导致一个小窗口

时间:2017-12-21 13:07:04

标签: c# windows winforms svg

所以我创建了一个简单的表单来测试使用SVG图像绘制自定义形状的窗口。 Inspiration found here

它似乎工作正常,但无论我做什么,我的窗口尺寸太小,无法控制。

这样做的原因:很酷吗? Windows需要更好的主题支持。我很无聊!

我在Visual Studio中使用来自nuget.com的Svg

代码:

    using Svg;

    public const int WM_NCLBUTTONDOWN = 0xA1; public const int HT_CAPTION = 0x2;

    internal class NativeMethods
    {
        // Allows forms with Toolbox property set to false to be moved
        [System.Runtime.InteropServices.DllImportAttribute("user32.dll", CharSet = CharSet.Unicode)]
        internal static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
        [System.Runtime.InteropServices.DllImportAttribute("user32.dll", CharSet = CharSet.Unicode)]
        internal static extern bool ReleaseCapture();
    }
    public Form1()
    {
        InitializeComponent();
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        System.Drawing.Drawing2D.GraphicsPath frmshp = new System.Drawing.Drawing2D.GraphicsPath();
        //frmshp.AddEllipse(0, 0, this.Width, this.Height);

        //SvgDocument.Open(@"TestWindowsshape.svg");
        SvgDocument newshp = SvgDocument.Open(@"TestWindowsshape.svg");
        frmshp = (newshp.Path);

        this.Region = new Region(frmshp);
    }
    private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        // Make settings window movable without a titlebar
        if (e.Button == MouseButtons.Left)
        {
            NativeMethods.ReleaseCapture();
            NativeMethods.SendMessage(Handle, WM_NCLBUTTONDOWN (IntPtr)HT_CAPTION, (IntPtr)0);
        }
    }

我试图增加svg大小,使用代码一些,但我做的任何事情都不会使绘制的窗口更大。我知道我可以用BMP和TransparancyKey选项来做到这一点,但我不想那样做,因为BMP&透明度方法的缺点是不能在位图本身中使用一种颜色。任何建议将不胜感激

编辑:

   Matrix m = new Matrix();
   m.Scale(100, 100, MatrixOrder.Append);
   m.Translate(100, 100, MatrixOrder.Append);
   newshp.Path.Transform(m);

已经尝试过,没有效果。我认为这应该有效,这是否意味着问题出在我的SVG中?

1 个答案:

答案 0 :(得分:1)

问题似乎出现在SVG文件中,我在Notepad ++中调整了Rectangle的大小并获得了更大的窗口,但更复杂的形状将是一件麻烦事。似乎Inkscape无法创建可靠大小的SVG ......我有"文档属性"设置为我的屏幕分辨率,但向量都变得太小。也许Illustrator可以正确地做到这一点。