Winform和WPF窗体/窗口边框

时间:2012-12-05 15:12:31

标签: c# wpf winforms forms border

我一直在处理这个问题,我不知道如何继续。

我有一个包含Windows窗体和WPF窗体的项目。

我希望每个表单都像这样显示(它是一个WPF):

WPF = http://imageshack.us/photo/my-images/545/wpfk.png/

我实现了这个windows style = none和canresize = yes。我实际上并不希望它被调整大小。我只想在表格周围留下薄薄的边框。但如果我把canresize = false我丢失了边界。我也希望能够在屏幕上移动窗口,而不是在那个地方静止。

我也需要我的winforms所有这些。

的Winforms: WINFORM = http://imageshack.us/photo/my-images/836/winforms.png/

我希望你们明白我需要什么。从图形上看,它必须像第一张图像一样。

3 个答案:

答案 0 :(得分:1)

我不确定它是否有帮助,但您可以为此创建Forms集合。 (a)中

http://support.microsoft.com/kb/815707/en-us

答案 1 :(得分:1)

您只需将设计器中的WinForms FormBorderStyle属性设置为SizableFixedDialogFixed3D等。其中一个必然会为您提供行为需要。

答案 2 :(得分:1)

解决方案:将此代码粘贴到表单或基本表单中。

private const int WS_SYSMENU = 0x80000;
protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.Style &= ~WS_SYSMENU;
        return cp;
    }
}

感谢Killercam的帮助!

WPF窗口解决方案:

public MainWindow()
    {
        SourceInitialized += Window_SourceInitialized;
        InitializeComponent();
    }

    private void button2_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
    }

    private void button3_Click(object sender, RoutedEventArgs e)
    {
        this.WindowState = WindowState.Minimized;
    }

    private void Window_SourceInitialized(object sender, EventArgs e)
    {
        WindowInteropHelper wih = new WindowInteropHelper(this);
        int style = GetWindowLong(wih.Handle, GWL_STYLE);
        SetWindowLong(wih.Handle, GWL_STYLE, style & ~WS_SYSMENU);
    }

    private const int GWL_STYLE = -16;
    private const int WS_SYSMENU = 0x00080000;

    [DllImport("user32.dll")]
    private extern static int SetWindowLong(IntPtr hwnd, int index, int value);
    [DllImport("user32.dll")]
    private extern static int GetWindowLong(IntPtr hwnd, int index);