首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止SetWindowPos()使窗口全屏显示?

如何防止SetWindowPos()使窗口全屏显示?
EN

Stack Overflow用户
提问于 2020-04-10 07:23:56
回答 1查看 152关注 0票数 0

当我将屏幕的尺寸和(0, 0)位置传递给SetWindowPos()MooveWindow()函数时,它们可以工作,但它们使我的窗口(它具有WS_POPUPWS_EX_LAYERED标志)的行为有所不同:通常情况下,如果窗口具有与任务栏重叠的区域,则任务栏将呈现在窗口的顶部,但在这种情况下,窗口将完全隐藏任务栏。而且色键也不能正常工作。这些行为让人联想到全屏窗口。我的问题是,我希望我的程序能够让window覆盖没有任何任务栏的监视器的所有像素,但保留使用颜色键的能力,这是不可能的,因为调用这样的函数会使窗口全屏显示,这会破坏颜色键。所以我想知道如何防止SetWindowPos()使窗口全屏显示,即使我传递了屏幕的尺寸,例如使用标志或使用其他函数。

编辑:如果没有解决方案(屏幕尺寸的窗口必须是全屏的),请告诉我。

如何创建窗口:

代码语言:javascript
复制
WindowClass.cbSize = sizeof(WNDCLASSEX);
WindowClass.lpfnWndProc = WindowProcedure;
WindowClass.lpszClassName = L"WindowsClass";
WindowClass.hbrBackground = CreateSolidBrush(RGB(30, 30, 30));

// ...

HWND Window = CreateWindowEx(WS_EX_APPWINDOW | WS_EX_LAYERED,
    L"WindowsClass", L"FinalWindow", WS_POPUP | WS_MINIMIZEBOX |
    WS_MAXIMIZEBOX, 100, 100, 500, 500, NULL, NULL, NULL, NULL);

SetLayeredWindowAttributes(Window, RGB(30, 30, 30), 0, LWA_COLORKEY);

如何使用SetWindowPos():

代码语言:javascript
复制
int ScreenWidth = GetDeviceCaps(FinalWindowDeviceContext, HORZRES);
int ScreenHeight = GetDeviceCaps(FinalWindowDeviceContext, VERTRES);
SetWindowPos(FinalWindow, NULL, 0, 0, ScreenWidth, ScreenHeight, 0);
EN

回答 1

Stack Overflow用户

发布于 2020-04-10 13:31:28

当您为hWndInsertAfter使用NULL值时,最好设置SWP_NOZORDER,除非您想要将窗口放在(非顶部窗口的)顶部。NULL值表示HWND_TOP

代码语言:javascript
复制
SetWindowPos(FinalWindow, NULL, x, y, w, h, SWP_NOZORDER);

要通过排除任务栏覆盖的区域来缩小窗口,可以使用GetMonitorInfo获取MONOTRINFOrcWork字段包含未被任何应用程序栏(例如任务栏)使用的监视器区域的RECT

代码语言:javascript
复制
POINT       point = {0, 0};
HMONITOR    monitor = MonitorFromPoint(point, MONITOR_DEFAULTTONEAREST);
MONITORINFO mi;
mi.cbSize = sizeof(mi);
GetMonitorInfo(monitor, &mi);
RECT        work_area = mi.rcWork;

SetWindowPos(
    FinalWindow,
    NULL,
    work_area.left,
    work_area.top,
    work_area.right - work_area.left;
    work_area.bottom - work_area.top,
    SWP_NOZORDER); // To prevent z-order change
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61131782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档