Win32 + WPF可调整大小,无边框窗口,具有系统菜单

时间:2014-07-21 20:52:58

标签: c# wpf winapi

我在WPF中有一个(NoResize Borderless)窗口,我试图让它有大小但仍然有系统菜单工作。 我手动完成了NC hittesting以启用调整大小和系统菜单。但是,我一次只能上班。我尝试使用SetWindowLong(Ptr)启用两者,但我无法获得任何组合来启用系统菜单和调整大小。 我已经尝试启用WS_SYSMENU样式,这没有任何区别。

PostMessage(callingWindow, WindowMessage.SystemCommand, new IntPtr(trackPMenu), IntPtr.Zero);

仅在窗口无法调整大小时才有效 此外,将窗口设置为重叠窗口(WS_OVERLAPPEDWINDOW)会在窗口周围放置一个框架。

1 个答案:

答案 0 :(得分:1)

MahApps OSS项目能够使用系统菜单创建无可调整大小的无边界窗口。看看MetroWindow上课。

我目前正在使用带有系统菜单的可调整大小的无边框窗口:

代码背后:

using MahApps.Metro.Controls;

public partial class MainWindow : MetroWindow
{
    public MainWindow()
    {
        InitializeComponent();
    }
}

XAML:

<controls:MetroWindow x:Class="XXXX.Views.MainWindow"
                      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                      mc:Ignorable="d"
                      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                      xmlns:vm="clr-namespace:XXXX.ViewModels"
                      xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"
                      d:DataContext="{d:DesignInstance vm:MainViewModel}"
                      WindowStartupLocation="Manual"
                      SaveWindowPosition="True"
                      Title="{Binding Path=Title, Mode=OneWay}"
                      Style="{StaticResource MyCleanWindowStyleKey}">

</controls:MetroWindow>

使用以下样式:

<Style x:Key="MyCleanWindowStyleKey"
       TargetType="{x:Type c:MetroWindow}">
    <Setter Property="BorderThickness"
            Value="2" />
    <Setter Property="BorderBrush"
            Value="Blue" />
    <Setter Property="Background"
            Value="Black" />
    <Setter Property="Foreground"
            Value="White" />
    <Setter Property="TitleForeground"
            Value="White" />
    <Setter Property="TitlebarHeight"
            Value="42" />
    <Setter Property="WindowState"
            Value="Normal" />
    <Setter Property="ResizeMode"
            Value="CanResizeWithGrip" />
    <Setter Property="AllowsTransparency"
            Value="False" />
    <Setter Property="TitleCaps"
            Value="False" />
    <Setter Property="ShowWindowCommandsOnTop"
            Value="False" />
    <Setter Property="WindowTransitionsEnabled"
            Value="False" />
</Style>