Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I had this same problem. It appears that <code>WS_EX_DLGMODALFRAME</code> only removes the icon when the WPF window's native Win32 window does not have an icon associated with it. WPF (conveniently) uses the application's icon as the default icon for all windows without an explicitly set icon. Normally, that doesn't cause any problems and saves us the trouble of manually setting the application's icon on each window; however, it causes a problem for us when we try to remove the icon.</p> <p>Since the problem is that WPF automatically sets the window's icon for us, we can send <a href="http://msdn.microsoft.com/en-us/library/ms632643(VS.85).aspx" rel="noreferrer">WM_SETICON</a> to the Win32 window to reset its icon when we are applying <code>WS_EX_DLGMODALFRAME</code>.</p> <pre><code>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); </code></pre> <p>Code to remove the icon:</p> <pre><code>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); </code></pre> <p><strong>Edit:</strong> Oh, and it looks like this works only when the app is run <em>outside</em> of Visual Studio.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload