仅使用Windows API创建Windows CE 5.0全屏窗口

4
我正在尝试为Windows CE 5.0编写全屏应用程序。我在Linux下使用CEGCC编译我的应用程序,因此我受限于Windows API - 没有花哨的GUI设计工具,没有Visual Studio,没有MFC,没有.NET。

到目前为止,我尝试了微软的示例,使用SHFullScreen,但没有成功。我不想全局隐藏任务栏(即当我的应用程序关闭时,它会正常运行,或者说崩溃,并且无法恢复其状态)。

对此有什么想法吗?一个能够实现这个功能的简单程序(确保能够实现,而不只是“我认为可以”),即在Windows CE 5.0(或任何Windows CE/Mobile/Embedded,我至少有线索)中显示窗口,从屏幕左上角延伸到右下角,覆盖任务栏,将非常有帮助。

谷歌没有给我太多帮助,如果你问的话(但也许我今天没有使用正确的术语)。

干杯

3个回答

2
任务栏应该在所有窗口之上,而且不受进程的影响,所以要实现“全屏”效果,必须将其隐藏。
这里提供了一个C#版本的代码,很容易转换为C语言(因为它主要是P/Invoke C)。
当您的应用程序退出时,它肯定可以恢复任务栏的显示(也应该这样做),但如果它崩溃了,操作系统无法自动“知道”需要还原任务栏。当然,如果您控制操作系统,您总是可以创建一个新的Shell来监视这种情况,但我建议您尽量让您的应用程序不要崩溃

我的应用在开发过程中可能会崩溃,因为我没有模拟器的便利(所以我想我可以在桌面上使用另一个应用程序手动恢复我的任务栏)。另外,我无法控制操作系统。我在这方面相当强硬。我只是希望有人知道如何让我提到的功能工作,因为微软有为此目的而记录它。 - Radu C
SHFullScreen不保证存在 - 它在aygshell中,因此如果操作系统中没有它,您将无法使用它。调用我发布链接中的API更加通用。 - ctacke

1

我通过将以下代码放在case WM_CREATE下的WndProc中解决了所有需求:

int ScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int ScreenHeight = GetSystemMetrics(SM_CYSCREEN);

SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, ScreenWidth, ScreenHeight, 0);
HWND TaskBarWnd = FindWindow("HHTaskBar", "");
if (TaskBarWnd != NULL)
    SetWindowPos(TaskBarWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE);

1

值得注意的是,只有在SEH是操作系统映像的一部分时,此方法才能生效。 - ctacke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接