그래서 SVG 이미지를 사용하여 사용자 정의 모양의 윈도우를 그리는 간단한 테스트를 만들었습니다. Inspiration found herethis.Region Path 데이터가 작은 창으로 연결됩니다.
아무리 잘하면 내 창 크기가 너무 작아서 아무 컨트롤을 붙이지 않아도됩니다.
이유 : 멋진 데요? Windows는 더 나은 테마 지정 지원이 필요합니다. 나 지루 했어!
내가코드 비주얼 스튜디오 내에서 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 & 투명도 메서드는 비트 맵 자체에서 하나의 색을 사용할 수 없다는 단점이 있기 때문에 BMP 및 TransparancyKey 옵션을 사용하여이 작업을 수행 할 수 있음을 알고 있습니다. 어떤 조언을 주시면 감사하겠습니다
편집 :
Matrix m = new Matrix();
m.Scale(100, 100, MatrixOrder.Append);
m.Translate(100, 100, MatrixOrder.Append);
newshp.Path.Transform(m);
가 영향을 미치지 않고, 시도되고있다. 나는 이것이 SVG 내에 문제가 있다는 것을 의미한다고 생각할 것입니다.