首页 > Linux操作系统 > Linux操作系统 > AP的全屏与非全屏的切换
1.实现全屏 RECT rc; SetRect(&rc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); ::MoveWindow(m_hWnd, rc.left, rc.top, rc.right, rc.bottom, TRUE); ::SHFullScreen(m_hWnd, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON); 在你的消息响应函数中加入上面的代码就可以全屏了,无开始菜单,无输入法。 2.恢复正常显示 RECT rc; SetRect(&rc, 0, 0 + GetSystemMetrics(SM_CYCAPTION), GetSystemMetrics(SM_CXVIRTUALSCREEN), GetSystemMetrics(SM_CYVIRTUALSCREEN) - GetSystemMetrics(SM_CYMENU) - GetSystemMetrics(SM_CYCAPTION) + 3); //这里有个“ + 3” 实在是没办法。 ::MoveWindow(m_hWnd, rc.left, rc.top, rc.right, rc.bottom, TRUE); ::SHFullScreen(m_hWnd, SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON | SHFS_SHOWSTARTICON); 代码中注释的地方是为了处理客户区的高度不够,在下面会有一条黑线,谁有更好的办法可以交流下。 3.菜单的显示与隐藏。 //创建菜单 SHMENUBARINFO mbi; memset(&mbi, 0, sizeof(SHMENUBARINFO)); mbi.cbSize = sizeof(SHMENUBARINFO); mbi.dwFlags = SHCMBF_HMENU; mbi.hwndParent = m_hWnd; mbi.nToolBarId = IDR_MENUBAR1; mbi.hInstRes = _Module.GetModuleInstance(); SHCreateMenuBar(&mbi); //隐藏菜单 HWNDhwndMB = SHFindMenuBar (m_hWnd); ::ShowWindow(hwndMB,SW_HIDE); //这里写成 ::ShowWindow(hwndMB,SW_SHOWMAXIMIZED); 会出现菜单全屏的奇观,哈哈。 // 恢复菜单的显示 ::ShowWindow(hwndMB,SW_SHOW); 在恢复菜单显示的时候,菜单的句柄hwndMB,只能用上面得到的,如果这里再用 SHFindMenuBar (m_hWnd); 得到的会是一个NULL。我猜测是因为被隐藏了,所以才这样。 关于全屏。在csdn上还有一些代码片段。 要在dlg初始化的时候加入。 SHINITDLGINFO shidi; --------以下文字为 2008.10.6补充---------- 今天尝试采用全屏窗口假透明的方式来实现一个 lockscreen 。发现全屏有点小问题。 1.在dlg 或者 view 中直接执行上面列出的代码。手机屏幕顶部的开始菜单栏不能隐藏。在窗体创建过程中发送个消息给窗体本身,模拟按钮消息,可以解决以上问题。 2.当窗体全屏并且假透明的时候,开始菜单栏最右边的关闭按钮得想办法除去。在csdn上找了下。找到一下两行代码: ::SHDoneButton(m_hWnd,SHDB_HIDE); 试验表明可以成功隐藏右上角的按钮。 ----------以下文字 2008.10.7 补充----------- 今天在一个MFC的dlg的工程里面测试上面的代码。发现下面的菜单栏老是去不掉。我代码中没有创建菜单栏或者工具条什么的! //删除菜单栏,实际上那不是菜单栏,是个工具条 CControlBar* //隐藏输入法按钮,这个在程序退出以后记得还原回来。呵呵 |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16803921/viewspace-608867/ ,如需转载,请注明出处,否则将追究法律责任。