如何删除图标并添加?在wpf窗口中按钮?

时间:2012-04-30 10:42:55

标签: wpf

我有一个用于删除图标的单独代码和一个用于添加'?'(帮助)按钮的代码。但任何人都可以帮我做两件事。 我的代码如下。

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

    [DllImport("user32.dll")]
    static extern int SetWindowLong(IntPtr hwnd, int index, uint newStyle);

    [DllImport("user32.dll")]
    static extern bool SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter,
               int x, int y, int width, int height, uint flags);

    [DllImport("user32.dll")]
    static extern IntPtr SendMessage(IntPtr hwnd, uint msg,
               IntPtr wParam, IntPtr lParam);

    const int GWL_EXSTYLE = -20;
    const int WS_EX_DLGMODALFRAME = 0x0001;
    const int WM_SETICON = 0x0080;

    private const uint WS_EX_CONTEXTHELP = 0x00000400;
    private const uint WS_MINIMIZEBOX = 0x00020000;
    private const uint WS_MAXIMIZEBOX = 0x00010000;
    private const int GWL_STYLE = -16;
    private const int SWP_NOSIZE = 0x0001;
    private const int SWP_NOMOVE = 0x0002;
    private const int SWP_NOZORDER = 0x0004;
    private const int SWP_FRAMECHANGED = 0x0020;
    private const int WM_SYSCOMMAND = 0x0112;
    private const int SC_CONTEXTHELP = 0xF180;

以下代码为删除图标。

    public static void RemoveIcon(Window window)
    {
        IntPtr hwnd = new WindowInteropHelper(window).Handle;

        // Change the extended window style to not show a window icon
        uint extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
        SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_DLGMODALFRAME | WM_SETICON);

        // Update the window's non-client area to reflect the changes
        SetWindowPos(hwnd, IntPtr.Zero, 0, 0, 0, 0, SWP_NOMOVE |
              SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
    }

此功能用于添加帮助图标

    public static void AddHelpIcon(Window window)
    {
        IntPtr hwnd = new System.Windows.Interop.WindowInteropHelper(window).Handle;
        uint styles = GetWindowLong(hwnd, GWL_STYLE);
        styles &= 0xFFFFFFFF ^ (WS_MINIMIZEBOX | WS_MAXIMIZEBOX);
        SetWindowLong(hwnd, GWL_STYLE, styles);
        styles = GetWindowLong(hwnd, GWL_EXSTYLE );
        styles |= WS_EX_CONTEXTHELP;
        SetWindowLong(hwnd, GWL_EXSTYLE, styles | WS_EX_DLGMODALFRAME | WM_SETICON);
        SetWindowPos(hwnd, IntPtr.Zero, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
        ((HwndSource)PresentationSource.FromVisual(window)).AddHook(HelpHook);
        }

        private static IntPtr HelpHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
        {
            if (msg == WM_SYSCOMMAND &&
                ((int)wParam & 0xFFF0) == SC_CONTEXTHELP)
            {
                MessageBox.Show("help");
                handled = true;
            }
            return IntPtr.Zero;
       }

所以任何人都可以帮助我在Windows中完成这两项工作。

1 个答案:

答案 0 :(得分:0)

我正在使用最适合的Telerik window。请试一试。