我们的3D应用程序窗口需要覆盖用户的整个桌面,包括任务栏(不可调整大小、不是像电子游戏中的全屏/最大化状态,而只是一个带有右上角[X]的窗口以及标题栏和状态栏)。
为了实现这一目标,我们使用了以下代码:
为了实现这一目标,我们使用了以下代码:
void
CTheApp::SetFullScreenMode()
{
HWND hwnd = getHandle();
long style = ::GetWindowLong(hwnd, GWL_STYLE);
style &= ~(WS_MAXIMIZEBOX|WS_MINIMIZEBOX|WS_THICKFRAME);
::SetWindowLong(hwnd, GWL_STYLE, style);
// get screen dimensions
int width = ::GetSystemMetrics(SM_CXSCREEN);
int height = ::GetSystemMetrics(SM_CYSCREEN);
::MoveWindow(hwnd, 0, 0, width, height, TRUE);
}
在 Windows 10 之前,这个软件能够满足我们的需求。
但是,在使用 Windows 10 时,窗口左侧、右侧和底部会出现一个小间隙(确切地说,左侧和右侧各为9像素,底部也是9像素)。
看起来Windows 10在非最大化窗口的边框上添加了这种透明样式。
有没有一种简单的方法,在 Windows 10 中使窗口充满整个屏幕而不留下任何明显的间隙(即消除透明边框),同时又可以在先前版本的 Windows 中(Windows 7 - Windows 8.1)保持软件功能的有效性?是否可以通过某种方式将这种“透明度”设置为零?
我考虑过通过向每个方向增加9个像素的方式进行“破解”,但这可能会导致用户选择其他主题(例如高对比度)或者该应用程序在多个显示器上使用多个窗口时出现问题。