首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

要防止SetWindowPos()使窗口全屏显示,可以采取以下方法:

  1. 使用GetWindowRect()函数获取窗口的当前位置和大小信息。
  2. 判断窗口是否已经是全屏状态,可以通过比较窗口的大小与屏幕的大小来判断。
  3. 如果窗口已经是全屏状态,则不执行SetWindowPos()函数,以防止窗口再次全屏显示。
  4. 如果窗口不是全屏状态,则可以使用SetWindowPos()函数将窗口设置为指定的位置和大小。

以下是一个示例代码,演示如何防止SetWindowPos()使窗口全屏显示:

代码语言:txt
复制
#include <Windows.h>

BOOL IsWindowFullScreen(HWND hWnd)
{
    RECT rect;
    GetWindowRect(hWnd, &rect);

    int screenWidth = GetSystemMetrics(SM_CXSCREEN);
    int screenHeight = GetSystemMetrics(SM_CYSCREEN);

    if (rect.left == 0 && rect.top == 0 && rect.right == screenWidth && rect.bottom == screenHeight)
    {
        return TRUE;
    }

    return FALSE;
}

void SetWindowNotFullScreen(HWND hWnd, int x, int y, int width, int height)
{
    if (!IsWindowFullScreen(hWnd))
    {
        SetWindowPos(hWnd, NULL, x, y, width, height, SWP_NOZORDER);
    }
}

int main()
{
    HWND hWnd = GetForegroundWindow(); // 获取当前活动窗口的句柄

    // 设置窗口为非全屏状态,位置为(100, 100),大小为800x600
    SetWindowNotFullScreen(hWnd, 100, 100, 800, 600);

    return 0;
}

这段代码中,通过IsWindowFullScreen()函数判断窗口是否已经是全屏状态,如果是则不执行SetWindowPos()函数。而SetWindowNotFullScreen()函数用于将窗口设置为非全屏状态,可以指定窗口的位置和大小。

请注意,以上代码仅为示例,具体实现可能需要根据具体的开发环境和需求进行调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

全屏如何过滤部分窗口

系统学习Windows客户端开发 在某些业务场景下希望截全屏时不显示某些窗口特别是自身应用的窗口,比如在屏幕共享时不希望将自己应用的主界面、工具条等共享给对方。...Windows有个特性Magnification(放大镜)特性,它允许将屏幕(或屏幕某个指定区域)进行放大,如果不设置放大比例等同于截屏,其支持选择窗口过滤,利用该特性就可以实现过滤部分窗口下截屏。...笔者编写类CScreenCapture,用来实现过滤部分窗口截图,结合MSDN仔细阅读理解就容易掌握其使用。...CScreenCapture类提供三个接口SetFilterWindowList()指定过滤窗口列表,SetFrameRate()指定每秒帧数,SetScreenImageArriveCallback(...内部开启一个UI线程定期执行截屏,线程创建运行使用 一个简单实用的线程基类CThreadBase,最后DEMO演示如何在接收图片回调中将其保存成BITMAP格式的图片。

4.3K63
  • WPF 稳定的全屏窗口方法

    ,可以根据自己的业务决定 为了样式如何调用全屏方法,在窗口添加一个按钮,在点击按钮时,进入或退出全屏 <ToggleButton HorizontalAlignment="Center" VerticalAlignment...去掉 WS_MAXIMIZE 样式,使窗口变成还原状。...//使用窗口当前的矩形调用下设置窗口位置和尺寸的方法,让Hook来进行调整窗口位置和尺寸到全屏模式 Win32.User32.SetWindowPos(hwnd,...//使用窗口当前的矩形调用下设置窗口位置和尺寸的方法,让Hook来进行调整窗口位置和尺寸到全屏模式 Win32.User32.SetWindowPos(hwnd,...//使用窗口当前的矩形调用下设置窗口位置和尺寸的方法,让Hook来进行调整窗口位置和尺寸到全屏模式 Win32.User32.SetWindowPos(hwnd,

    4.8K20

    如何使特定的数据高亮显示?

    如上图所示,我们需要把薪水超过20000的行,通过填充颜色突出显示出来。如何实现呢?还是要用到excel里的“条件格式”哦。...在实操之前,肯定会有小伙伴问到:为什么不能直接用“突出显示单元格规则”里的“大于”规则?只要数据大于20000的,就一律设置为突出显示,不可以么? 答案是不可以!下面告诉你为什么?...所以,在这里要提醒小伙伴们,如果想实现整行的突出显示,“突出显示单元格规则”是不适用的。“突出显示单元格规则”顾名思义,就是对符合规则的“单元格”进行设置,而不是对“数据行”进行设置。...那么,要实现整行的条件规则设置,应该如何操作?既然excel内置的条件规则已经不够用了,下面就自己动手DIY新规则吧。 2.如何使特定数据行高亮显示?...文本是永远大于数值的哦,如果选定了标题行,excel也会对标题行进行判断) 然后,在【开始】选项卡下,单击【条件格式】按钮,在展开的下拉菜单中,单击【新建规则】命令项,如下图: 在弹出的【新建格式规则】窗口

    5.4K00

    EasyPlayerPro-win配置全屏模式不能全屏是为什么

    EasyPlayerPro播放界面: 针对该问题,我们与这个项目团队进行了详细沟通,才得知当前的显示器是多屏拼接显示的,用Nvidia的Surround配置多个显示器拼接成一个显示器来用,目的是提高显示效果...但是就算如此,也不应该在本应全屏的时候不能全屏显示,最终只能回归到检查代码。...在检查到代码FullScreen()时,忽然看到了如下代码: ShowWindow(SW_MAXIMIZE); 这个代码透露了一定的信息,让我们开始思考当前指定窗口最大化是否不能对多屏显示起作用,或者只是对当前第一块屏幕有效...既然通过拖拽的方式可以实现最大化的需求,我们是否可以换个思路,直接将窗口指定分辨率,于是做如下试验: SetWindowPos(NULL, 0, 0, 7688, 4328, 0) 从左上角开始绘制窗体的时候就指定好窗体的宽和高...,然后再配合去除窗体边框等,调试运行后,过然可以解决问题,此时能果断解决网友遇到的“全屏”问题。

    1.4K30

    Unity实战篇 | 使Unity打包的exe程序始终保持屏幕最前端【文末送书】

    文章目录 前言 Unity实战篇 |使Unity打包的exe程序始终保持屏幕最前端 一、编写核心脚本代码 二、将应用程序打包成Exe并运行测试 三、效果展示 总结 评论区抽奖送书 规则 推荐理由...置顶之后这个窗口就会显示在屏幕最前方,不会被其他应用窗口遮挡。 想要实现这个功能的话在Unity中并没有找到相关的API可以直接拿来使用。...---- Unity实战篇 |使Unity打包的exe程序始终保持屏幕最前端 一、编写核心脚本代码 实现该功能主要是使用了几个关键的Windows的API,分别是下面几个函数: ShowWindow...运行效果如下: 该西红柿闹钟的exe文件会一直显示在屏幕最前方不会被其他窗口盖住。 ---- 总结 本文简单介绍了在Unity中使Unity打包的exe程序始终保持屏幕最前端的方法。...Unity实战篇 |Unity 打包exe 实现隐藏窗口标题栏、隐藏最小化最大化关闭按钮 解决:“Unity打包非全屏游戏,运行时仍然全屏” 的问题

    1.7K30

    窗口之间Parent和Own关系的区别

    SetWindowPos()等涉及窗口位置的API,其左上角坐标(x,y)都是相对于Parent窗口的客户区域。...第四,毫无疑问,Child窗口一定是显示在Parent窗口之上,Parent窗口显示时Child显示,Parent窗口隐藏时Child隐藏。...Own窗口 第三,Owned窗口显示区域是全屏,跟Own窗口显示区域没有任何关系,MoveWindow()、SetWindowPos()等涉及窗口位置的API,其左上角坐标(x,y)都是相对于屏幕左上角...第四,Owned窗口显示Own窗口之上,这是为什么要建立Own关系的重要原因,Own窗口显示隐藏不影响Owned窗口显示状态。...第二,判断窗口显示范围,如果希望独立可以在全屏上自由移动展示就选择Own关系,如果希望限制在某个窗口内就选择Parent关系。

    1.3K40

    OpenGL学习笔记:Console工程下如何显示控制台黑窗口显示Windows窗口

    刚学习OpenGL,绘制图形的时候,如果不进行设置,运行的时候会先出现黑窗口再出现Windows窗口。...其实要去除控制台窗口非常简单,只需要修改工程设置,把子系统改成Windows,程序的入口点改成mainCRTStartup。 下面我先把几中解决办法列举出来,再解释下我的理解。...主要是因为Windows系统下有几种子系统,一种是控制台,一种是窗口子系统,如果建立了控制台工程肯定是要创建控制台子系统程序了,建立了Windows Application和MFC之类的工程则是窗口子系统了...不同的子系统会链接不同的主函数,控制台的会链接main,窗口的会链接WinMain,如果不匹配肯定会链接失败。...现在我们使用OpenGL编程,又建立的是控制台工程,如果不进行设置肯定会出现黑窗口的,所以我们把工程的子系统改成Windows,但是我们不想改主函数为WinMain了,因为这样会很麻烦,所以我们再把程序入口改成

    1.6K70

    AdjustWindowRect 与 SetWindowPos

    2 SetWindowPos     函数功能:该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸,位置和Z序。...SWP_DEFERERASE:防止产生WM_SYNCPAINT消息。     SWP_DRAWFRAME:在窗口周围画一个边框(定义在窗口类描述中)。     ...适用于客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动而露出的父窗口的所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口的任何部分和父窗口需要重画的部分。     ...SWP_SHOWWINDOW:显示窗口。     返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误消息,请调用GetLastError函数。     ...如果使用SetWindowLoog改变了窗口的某些数据,则必须调用函数SetWindowPos来作真正的改变。

    1.7K70

    WPF 让窗口激活作为前台最上层窗口的方法

    组合可以让窗口作为当前用户活动的,即使窗口之前是最小化或隐藏,都可以通过 Show 的方法显示 但是某些设备窗口被盖在其他的窗口的下面,此时的窗口的 window.IsActive 还是 true 但是调用...FindWindow     2.切换键盘输入焦点AttachThreadInput     3.显示窗口ShowWindow(有些窗口被最小化/隐藏了)     4.更改窗口的Zorder,SetWindowPos...使之最上,为了不影响后续窗口的Zorder,改完之后,再还原     5.最后SetForegroundWindow 在 WPF 中对应的更改窗口的顺序使用的是 Topmost 属性,同时设置顺序需要做一点小的更改...FindWindow     2.切换键盘输入焦点AttachThreadInput     3.显示窗口ShowWindow(有些窗口被最小化/隐藏了...)     4.更改窗口的Zorder,SetWindowPos使之最上,为了不影响后续窗口的Zorder,改完之后,再还原     5.最后SetForegroundWindow

    3.2K11

    2020-5-22-如何使WPF在窗口外部区域可拖动缩放

    今天来和大家聊如何使WPF在窗口外部区域可拖动缩放。 ---- 问题来源 对于WPF窗口来说,默认的可拖动缩放区域较小。 在某些应用场景下我们期望能够设置一个较大的可拖动的缩放区域。...,而在外部依然不可以进行拖动缩放 image.png 添加外部窗口 想要在WPF窗口外部能够拖动缩放,问题的关键就在于如何能在外部收到鼠标点击拖动等消息。...要想这5个窗口能像一个窗口一样工作,必须要让周围的辅助窗口跟随主窗口的状态变化。...SizeChanged主要是通知辅助窗口调整位置和大小,确定包裹在主窗口周围 StateChanged和IsVisibleChanged用于通知窗口显示隐藏,避免主窗口隐藏时,辅助窗口还能被拖动 Closed...有了这些事件,辅助窗口就能够跟随主窗口进行变换了。 通知主窗口 接下来一个重要的事情就是辅助窗口被点击拖动时,通知主窗口进行拖动缩放。

    1.8K10

    Windows桌面暗水印方法与C++实现

    为了让被覆盖的其它窗体能正常响应鼠标事件,需要屏蔽自己窗体的鼠标事件 本文所讲的方法就是使用窗体实现 DirectX实现 许多全屏游戏的画面是由DirectX或OpenGL绘制,此时所有窗体都会被屏蔽,...setWindowFlags(Qt::WindowStaysOnTopHint); //删除边框 this->setWindowFlags(Qt::FramelessWindowHint); //不在任务栏显示...setWindowFlags(Qt::Tool); 其中widgetStyle为窗体属性,各参数解释如下: WS_EX_COMPOSITED: 启用窗体双缓冲,减少闪烁 WS_EX_LAYERED: 修改窗口为分层窗口...WS_EX_NOACTIVATE: 窗口不会在单击时成为前台窗口 WS_EX_TOPMOST: 窗口处于所有非最顶层窗口的上方并保持 WS_EX_TRANSPARENT: 在所有统计窗口重绘之后才重绘本窗口...,下面的代码用于在窗体展示之后设置最大化并置顶 this->setWindowState(Qt::WindowMaximized);//窗体最大化 SetWindowPos(hwnd,HWND_TOPMOST

    2.2K20

    学习 Avalonia 框架笔记 如何创建一个全屏置顶的 X11 应用窗口

    本文记录我从 Avalonia 框架里面学到如何创建一个全屏置顶的 X11 应用窗口的方法 开始之前,先从 Avalonia 或 CPF 里面拷贝足够的代码,这部分代码可以从本文末尾找到下载方法 设置全屏的核心代码是以下三行...((int)(EventMask.SubstructureRedirectMask | EventMask.SubstructureNotifyMask)), ref xev); } 如此即可获取一个全屏且在所有窗口...,包括任务栏的上层的最顶层 X11 窗口 以上代码是从 https://github.com/AvaloniaUI/Avalonia/blob/b5db6bb0f6c19070e2a09a23231bcc1e01c40610.../src/Avalonia.X11/X11Window.cs 里面抄的 分别是 WindowState 属性的 set 方法以及 SetTopmost 方法 为了让大家能够看到窗口在最顶层的效果,接下来绘制两条线段...XLib.XCreateGC(display, window, 0, 0); XLib.XMapWindow(display, window); XLib.XFlush(display); #region 全屏

    49610
    领券