

With the rise of ultra high-definition displays and devices that enable browsing the web via smart TVs, the internet is increasingly being accessed and viewed on screens that dwarf traditional desktop displays. Extra media queries are useful for targeting the huge displays, and typography can take you far. Jon is going to show us that just like RWD work of any kind, it requires planning. Jon told me he recently worked on a project where there was a lot of emphasis placed on giant screens. The window is way wider than the desktop.The following is a guest post by Jon Yablonski.

Reference Source for Process_WM_SIZE method of HwndSource: Any given program may ignore, rewrite, or bypass a window message and a framework can enforce it across an entire class of application such as with WPF above. Other frameworks such as GTK and Qt may or may not enforce size behavior and limits, and may have various workarounds possible to overcome those limits.
#Tiddlydesktop larger screen windows
If it is your own app and you host the WPF within a Windows Forms window (via ElementHost) you can resize the window and the WPF content will respect the larger-than-desktop Windows Form window. In this way, the WPF window is like the actively enforced window but, rather than enforcing a specific size, enforces a specific maximum (for RenderArea) and does not consider the WM_WINDOWPOSCHANGING message.
#Tiddlydesktop larger screen code
When the above code sample is run against a WPF app, you can see the 6000圆000 window in Aero Peek from the task bar or the window preview in the Windows-Tab switcher, but you can also see the WPF content and layout logic being clipped to the desktop area. The net effect is that the Win32 host window is resized (unless SizeToContent is set to SizeToContent.WidthAndHeight), but the WPF render area is locked to the desktop area, as if the NOSENDCHANGING flag weren't set. This is part of an overall process of adapting legacy Win32 messages to WPF events. In this case, the WM_SIZE message is then handled by the private Process_WM_SIZE which, in effect, bypasses the NOSENDCHANGING flag and alters the RenderSize of the WPF client area. The private method LayoutFilterMessage catches the WM_SYSCOMMAND, WM_SIZING, WM_WINDOWPOSCHANGING, and WM_SIZE messages. The Window class in WPF has an HwndSource that handles window messages sent to the WPF window. In either case, Windows with fixed sizes generally lack any layout logic to take advantage of larger sizes so, even if you can force it, resizing them confers no benefits. These windows may accept the message, but will restrict or limit the final size in their own code. Windows with active enforcement monitor the size, either by catching the windows messages such as WM_SIZE, or in more sophisticated layout logic. These windows can usually be resized by sending a message as described but, lacking layout logic, will not show anything other that additional empty client area. A window with a size enforced passively sets the initial size and simply exposes no ability for the user to resize the window (e.g., no size grip control). Window sizes might be enforced passively or actively by a program. For example, to resize the "Computer Management" window (which always runs elevated), this program would have to run elevated as well. An executable can only interact with windows at or below its own security context.

Starting with Windows Vista, Microsoft has implemented increasing security around window messages. This approach is generally functional, but there are a number of limitations that might prevent a window from being resized, or resized in any useful manner. SetWindowPos(hwnd, TOP, 0, 0, 6000, 6000, NOCOPYBITS | NOSENDCHANGING | SHOWWINDOW) Var hwnd = FindWindow(null, "Untitled - Notepad") Uint SHOWWINDOW = 0x0040, NOCOPYBITS = 0x0100, NOSENDCHANGING = 0x0400 Public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int left, int top, int width, int height, uint flags) Public static extern IntPtr FindWindow(String className, String windowName) The following is a tiny example program that will resize Notepad to 6000圆000 (change the string "Untitled - Notepad" to the title of the window you want to resize, or take the window name and desired size from the command line args) namespace Example Any other sizing of the window will cause the restriction to snap the window back to desktop restricted sizes, as the message will be sent and the window size enforced. This will prevent the WM_WINDOWPOSCHANGING message from being sent which is what triggers the WM_GETMINMAXINFO restriction. _in UINT uFlags // ** SWP_NOSENDCHANGING must be passed here ** If you would like to resize a window that you do not own (and without using any kind of hook), you can use the Windows SetWindowPos API with the SWP_NOSENDCHANGING (0x0400) flag set: BOOL WINAPI SetWindowPos(
