分类: WINDOWS
2010-07-27 10:19:27
The usual method of creating a full screen window in Windows CE involves using the function SHFullScreen
. This article describes a method of creating full screen windows with standard window management calls.
HWND hWnd; // The main window handle HWND hWndInputPanel = NULL; // The SIP HWND hWndTaskBar = NULL; // The TaskBar HWND hWndSipButton = NULL; // The SIP Button BOOL mode = false; // Our current window mode. // True = Fullscreen // False - Windowed (Startup Default)Finding the Window Information
The first step is to find the handles of the three main windows that handle the TaskBar, Standard Input Panel (SIP) and SIP Button Bar. This should be done early on in the application during initialization.
void InitFullScreen (void) { hWndInputPanel = FindWindow(TEXT("SipWndClass"), NULL); hWndSipButton = FindWindow(TEXT("MS_SIPBUTTON"), NULL); hWndTaskBar = FindWindow(TEXT("HHTaskBar"), NULL); }Toggling Between The Two Modes
Toggling between the two modes is a simple matter of setting the windows states, and sizing our window appropriately.
To Enter Fullscreen mode we use
ShowWindow(HWND,SW_HIDE)
on each of the system windows.To Exit Fullscreen mode we use
ShowWindow(HWND,SW_SHOW)
on each of the system windows. This will however also show the input panel, which is not desirable, sohWndInputPanel
should be ignored.Sizing the window to the correct size involves a different system call depending on whether you are entering or exiting Fullscreen Mode.
Entering Fullscreen mode we call
SetWindowPos(hWnd...
using the results from aGetSystemMetrics
call.Exiting Fullscreen mode we call
SetWindowPos(hWnd...
using the results from aSystemParametersInfo(...
call.void ToggleFullScreen() { RECT rtDesktop; if (mode) { if(hWndTaskBar != NULL) ShowWindow(hWndTaskBar, SW_SHOW); //if(hWndInputPanel != NULL) ShowWindow(hWndInputPanel, SW_SHOW); //Never forcibly show the input panel if(hWndSipButton != NULL) ShowWindow(hWndSipButton, SW_SHOW); if(SystemParametersInfo(SPI_GETWORKAREA, 0, &rtDesktop, NULL) == 1) SetWindowPos(hWnd,HWND_TOPMOST,0,0,rtDesktop.right - rtDesktop.left,rtDesktop.bottom - rtDesktop.top, SWP_SHOWWINDOW); mode = false; } else { if (hWndTaskBar != NULL) ShowWindow(hWndTaskBar, SW_HIDE); if (hWndInputPanel != NULL) ShowWindow(hWndInputPanel, SW_HIDE); if (hWndSipButton != NULL) ShowWindow(hWndSipButton, SW_HIDE); SetWindowPos(hWnd,HWND_TOPMOST,0,0,GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), SWP_SHOWWINDOW); mode = true; } }