File: System.Activities.Presentation\System\Activities\Presentation\View\WindowExtensionMethods.cs
Project: ndp\cdf\src\NetFx40\Tools\System.Activities.Presentation.csproj (System.Activities.Presentation)
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------
 
namespace System.Activities.Presentation.View
{
    using System.Runtime.InteropServices;
    using System.Windows;
    using System.Windows.Interop;
    using Microsoft.Tools.Common;
 
    static class WindowExtensionMethods
    {
        public static void ShowContextHelpButton(this Window window)
        {
            IntPtr hwnd = new WindowInteropHelper(window).Handle;
            IntPtr exStyle = Win32Interop.GetWindowLongPtr(hwnd, Win32Interop.GWL_EXSTYLE);
            if (IntPtr.Size == 4)
            {
                exStyle = new IntPtr(exStyle.ToInt32() | Win32Interop.WS_EX_CONTEXTHELP);
            }
            else
            {
                exStyle = new IntPtr(exStyle.ToInt64() | ((long)Win32Interop.WS_EX_CONTEXTHELP));
            }
            Win32Interop.SetWindowLongPtr(new HandleRef(window, hwnd), Win32Interop.GWL_EXSTYLE, exStyle);
        }
 
        public static void HideMinMaxButton(this Window window)
        {
            IntPtr hwnd = new WindowInteropHelper(window).Handle;
            IntPtr style = Win32Interop.GetWindowLongPtr(hwnd, Win32Interop.GWL_STYLE);
            if (IntPtr.Size == 4)
            {
                int intValue = style.ToInt32();
                intValue = SetBit(Win32Interop.WS_MAXIMIZEBOX, intValue, false);
                intValue = SetBit(Win32Interop.WS_MINIMIZEBOX, intValue, false);
                style = new IntPtr(intValue);
            }
            else
            {
                long longValue = style.ToInt64();
                longValue = SetBit((long)Win32Interop.WS_MAXIMIZEBOX, longValue, false);
                longValue = SetBit((long)Win32Interop.WS_MINIMIZEBOX, longValue, false);
                style = new IntPtr(longValue);
            }
            Win32Interop.SetWindowLongPtr(new HandleRef(window, hwnd), Win32Interop.GWL_STYLE, style);
        }
 
        public static void AddWindowsHook(this Window window, HwndSourceHook wmHandler)
        {
            IntPtr hwnd = new WindowInteropHelper(window).Handle;
            HwndSource source = HwndSource.FromHwnd(hwnd);
            source.AddHook(wmHandler);
        }
 
        public static void RemoveWindowsHook(this Window window, HwndSourceHook wmHandler)
        {
            IntPtr hwnd = new WindowInteropHelper(window).Handle;
            HwndSource source = HwndSource.FromHwnd(hwnd);
            source.RemoveHook(wmHandler);
        }
 
        public static void HideIcon(this Window window)
        {
            IntPtr hwnd = new WindowInteropHelper(window).Handle;
            IntPtr exStyle = Win32Interop.GetWindowLongPtr(hwnd, Win32Interop.GWL_EXSTYLE);
            if (IntPtr.Size == 4)
            {
                exStyle = new IntPtr(exStyle.ToInt32() | Win32Interop.WS_EX_DLGMODALFRAME);
            }
            else
            {
                exStyle = new IntPtr(exStyle.ToInt64() | ((long)Win32Interop.WS_EX_DLGMODALFRAME));
            }
            Win32Interop.SetWindowLongPtr(new HandleRef(window, hwnd), Win32Interop.GWL_EXSTYLE, exStyle);
 
            Win32Interop.SendMessage(hwnd, Win32Interop.WM_SETICON, new IntPtr(Win32Interop.ICON_SMALL), IntPtr.Zero);
            Win32Interop.SendMessage(hwnd, Win32Interop.WM_SETICON, new IntPtr(Win32Interop.ICON_BIG), IntPtr.Zero);
        }
 
        private static long SetBit(long mask, long value, bool flag)
        {
            if (flag)
            {
                return value | mask;
            }
            else
            {
                return value & ~mask;
            }
        }
 
        private static int SetBit(int mask, int value, bool flag)
        {
            if (flag)
            {
                return value | mask;
            }
            else
            {
                return value & ~mask;
            }
        }
    }
}