65.9K
CodeProject 正在变化。 阅读更多。
Home

Windows CE 中的全屏窗口

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.34/5 (10投票s)

2006年9月2日

CPOL

1分钟阅读

viewsIcon

75050

downloadIcon

1

在 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 函数更胜一筹了!

© . All rights reserved.