Squashed 'FSI.Lib/' content from commit 6aa4846
git-subtree-dir: FSI.Lib git-subtree-split: 6aa48465a834a7bfdd9cbeae8d2e4f769d0c0ff8
This commit is contained in:
89
FSI.Lib/Wpf/Ctrls/ChbWindowsTopMost.xaml.cs
Normal file
89
FSI.Lib/Wpf/Ctrls/ChbWindowsTopMost.xaml.cs
Normal file
@@ -0,0 +1,89 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Interop;
|
||||
|
||||
namespace FSI.Lib.Wpf.Ctrls
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaktionslogik für ChbWindowsTopMost.xaml
|
||||
/// </summary>
|
||||
public partial class ChbWindowsTopMost : UserControl
|
||||
{
|
||||
private Window _window;
|
||||
|
||||
//A window receives this message when the user chooses a command from the Window menu, or when the user chooses the maximize button, minimize button, restore button, or close button.
|
||||
public const Int32 WM_SYSCOMMAND = 0x112;
|
||||
|
||||
//Draws a horizontal dividing line.This flag is used only in a drop-down menu, submenu, or shortcut menu.The line cannot be grayed, disabled, or highlighted.
|
||||
public const Int32 MF_SEPARATOR = 0x800;
|
||||
|
||||
//Specifies that an ID is a position index into the menu and not a command ID.
|
||||
public const Int32 MF_BYPOSITION = 0x400;
|
||||
|
||||
//Specifies that the menu item is a text string.
|
||||
public const Int32 MF_STRING = 0x0;
|
||||
|
||||
//Menu Ids for our custom menu items
|
||||
public const Int32 _ItemTopMostId = 1000;
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool InsertMenu(IntPtr hMenu, Int32 wPosition, Int32 wFlags, Int32 wIDNewItem, string lpNewItem);
|
||||
|
||||
public ChbWindowsTopMost()
|
||||
{
|
||||
InitializeComponent();
|
||||
Loaded += ChbWindowsTopMost_Loaded;
|
||||
}
|
||||
|
||||
private void ChbWindowsTopMost_Loaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
_window = Window.GetWindow(this);
|
||||
|
||||
IntPtr windowhandle = new WindowInteropHelper(_window).Handle;
|
||||
HwndSource hwndSource = HwndSource.FromHwnd(windowhandle);
|
||||
|
||||
//Get the handle for the system menu
|
||||
IntPtr systemMenuHandle = GetSystemMenu(windowhandle, false);
|
||||
|
||||
//Insert our custom menu items
|
||||
InsertMenu(systemMenuHandle, 5, MF_BYPOSITION | MF_SEPARATOR, 0, string.Empty); //Add a menu seperator
|
||||
InsertMenu(systemMenuHandle, 6, MF_BYPOSITION, _ItemTopMostId, "immer im Vordergrund"); //Add a setting menu item
|
||||
|
||||
hwndSource.AddHook(new HwndSourceHook(WndProc));
|
||||
}
|
||||
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
|
||||
{
|
||||
// Check if the SystemCommand message has been executed
|
||||
if (msg == WM_SYSCOMMAND)
|
||||
{
|
||||
//check which menu item was clicked
|
||||
switch (wParam.ToInt32())
|
||||
{
|
||||
case _ItemTopMostId:
|
||||
_window.Topmost = !_window.Topmost;
|
||||
chbTopMost.IsChecked = _window.Topmost;
|
||||
handled = true;
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return IntPtr.Zero;
|
||||
}
|
||||
|
||||
private void CheckBox_Checked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
_window.Topmost = true;
|
||||
}
|
||||
|
||||
private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
_window.Topmost = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user