2012-04-30 2 views
1

У меня есть отдельный код для удаления значка и один для добавления кнопки?? (Help). но может ли кто-нибудь помочь мне сделать то и другое. мой код ниже.Как удалить значок и добавить? в окне 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; 
     } 

Так может кто-нибудь помочь мне делать оба из них в окнах.

ответ

0

Я использую Telerik window, который является лучшим для этого. Попробуйте.

Смежные вопросы