[英]WPF - remove system menu icon from modal window, but not main app window
我正在嘗試(在WPF中):
我在這里嘗試了解決方案: 從WPF窗口中刪除Icon
這很有效。 在http://blogs.msdn.com/b/wpfsdk/archive/2007/08/02/a-wpf-window-without-an-window-icon-the-thing-上有一個可下載的相同內容的樣本: 你點擊到得最系統menu.aspx
但是,如果我將.ico文件添加到.exe的項目屬性(屬性 - >應用程序 - >圖標和清單),它將停止工作。 您可以使用可下載的示例嘗試此操作。
似乎.exe中的圖標也用在模態窗口中(我們在.dll文件中也有),即使該.dll的屬性顯示為“默認圖標”。 它必須從.exe傳遞下來。 那么,有沒有辦法在主窗口上顯示圖標,而不是在子窗口上?
可能更簡單的方法是:即使項目的屬性中指定了.ico文件,是否可以刪除圖標?
我發現唯一能工作的是將模態窗口的WindowStye設置為“ToolWindow”。 這給了我幾乎我想要的東西:沒有圖標和“關閉”按鈕(右上角的“x”)仍然存在。 然而,x是超小的。 這是最好的嗎?
謝謝你的幫助。
我有同樣的問題。 當WPF窗口的本機Win32窗口沒有與之關聯的圖標時, WS_EX_DLGMODALFRAME
似乎只刪除圖標。 WPF(方便地)使用應用程序的圖標作為所有窗口的默認圖標,沒有明確設置的圖標。 通常情況下,這不會導致任何問題,並且可以省去在每個窗口上手動設置應用程序圖標的麻煩。 但是,當我們嘗試刪除圖標時,它會給我們帶來問題。
既然問題是,WPF自動設置窗口的圖標對於我們來說,我們可以發送WM_SETICON對Win32窗口時,我們正在申請重置其圖標WS_EX_DLGMODALFRAME
。
const int WM_SETICON = 0x0080;
const int ICON_SMALL = 0;
const int ICON_BIG = 1;
[DllImport("User32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern IntPtr SendMessage(
IntPtr hWnd,
int msg,
IntPtr wParam,
IntPtr lParam);
用於刪除圖標的代碼:
IntPtr hWnd = new WindowInteropHelper(window).Handle;
int currentStyle = NativeMethods.GetWindowLongPtr(hWnd, GWL_EXSTYLE);
SetWindowLongPtr(
hWnd,
GWL_EXSTYLE,
currentStyle | WS_EX_DLGMODALFRAME);
// reset the icon, both calls important
SendMessage(hWnd, WM_SETICON, (IntPtr)ICON_SMALL, IntPtr.Zero);
SendMessage(hWnd, WM_SETICON, (IntPtr)ICON_BIG, IntPtr.Zero);
SetWindowPos(hWnd, IntPtr.Zero, 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
編輯:哦,看起來這只有在應用程序在 Visual Studio 外部運行時才有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.