Windows CE 中的全屏窗口






3.34/5 (10投票s)
在 Windows CE 中创建全屏窗口,无需使用 SHFullScreen。
引言
通常,在 Windows CE 中创建全屏窗口的方法涉及使用函数 SHFullScreen
。本文描述了一种使用标准窗口管理调用创建全屏窗口的方法。
变量
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)
查找窗口信息
第一步是找到处理任务栏、标准输入面板 (SIP) 和 SIP 按钮栏的三个主窗口的句柄。这应该在应用程序初始化期间尽早完成。
void InitFullScreen (void)
{
hWndInputPanel = FindWindow(TEXT("SipWndClass"), NULL);
hWndSipButton = FindWindow(TEXT("MS_SIPBUTTON"), NULL);
hWndTaskBar = FindWindow(TEXT("HHTaskBar"), NULL);
}
在两种模式之间切换
在两种模式之间切换只需设置窗口状态,并适当调整窗口大小即可。
要进入全屏模式,我们对每个系统窗口使用 ShowWindow(HWND,SW_HIDE)
。
要退出全屏模式,我们对每个系统窗口使用 ShowWindow(HWND,SW_SHOW)
。但是,这也会显示输入面板,这不是期望的结果,因此应该忽略 hWndInputPanel
。
将窗口调整到正确大小涉及根据您是进入还是退出全屏模式使用不同的系统调用。
进入全屏模式时,我们调用 SetWindowPos(hWnd...
使用 GetSystemMetrics
调用结果。
退出全屏模式时,我们调用 SetWindowPos(hWnd...
使用 SystemParametersInfo(...
调用结果。
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;
}
}
关注点
更改为全屏窗口出奇地简单。 .NET 和 MFC 中有执行相同操作的函数,但是为了获得更高的性能,没有什么能比标准的 Win32 函数更胜一筹了!