当前位置:   WINDOWS > 正文

WinAPI CreateWindow函数创建比set更小的窗口

c++,winapi,screenshot,windows,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具

我的任务是使用类似于Windows的剪切工具的功能重新创建应用程序.其中一个是捕获当前活动的窗口的屏幕截图,这就是导致我出现问题的原因.一切都几乎完全没问题,但是应用程序的"剪切"比实际的应用程序大几个像素,这是因为它的窗口比我设置的略小.

这是我在主窗口上的CreateWindow调用我测试它:

hwnd = CreateWindow(TEXT("Klasa okien"), TEXT("Screenshot"), WS_OVERLAPPEDWINDOW, 
        10, 10, 350, 400, NULL, NULL, hInstance, NULL);

然后收集有关该窗口大小的信息并继续"采取剪切"功能的过程:

RECT okno;
HWND aktywne = GetForegroundWindow();
GetWindowRect(aktywne, &okno);
CaptureScreen(okno.left, okno.top, okno.right-okno.left, okno.bottom-okno.top);

最后是获取这些剪辑的部分功能:

void CaptureScreen(int x, int y, int width, int height)
{
    HDC hDc = CreateCompatibleDC(0);
    HBITMAP hBmp = CreateCompatibleBitmap(GetDC(0), width, height);
    SelectObject(hDc, hBmp);
    BitBlt(hDc, 0, 0, width, height, GetDC(0), x, y, SRCCOPY);
    Bitmap *p_bmp = Bitmap::FromHBITMAP(hBmp, NULL);
...

正如我所说 - 一切都很好,正在创建的图片实际上是350x400但实际窗口的大小似乎是336x393.我还附上了两张照片 - 完美的剪辑是由Windows工具创建的,另一张是我的.

我的工具350x400的结果和 Windows的截图工具336x393的结果



1> Barmak Shemi..:

这个问题是Windows 10特有的,它与Windows 10透明边框有关.例如,如果窗口重新调整边框大小,则左/右/底部的边框大约为7个像素.

如果您正在拍摄屏幕截图,则可能希望排除透明边框.替换GetWindowRect为:

DwmGetWindowAttribute(hwnd, DWMWA_EXTENDED_FRAME_BOUNDS, &rc, sizeof(RECT)); 
//requires at least Windows Vista

与之相比GetWindowRect,从DwmGetWindowAttribute左侧,右侧和底部获得的矩形可以小约7个像素.

#include "Dwmapi.h"
#pragma comment( lib, "Dwmapi.lib" )
...

RECT rc;
DwmGetWindowAttribute(hwnd, DWMWA_EXTENDED_FRAME_BOUNDS, &rc, sizeof(RECT));
int w = rc.right - rc.left;
int h = rc.bottom - rc.top;

HDC memdc = CreateCompatibleDC(hdc);
HBITMAP bmp = CreateCompatibleBitmap(hdc, w, h);
SelectObject(memdc, bmp);
BitBlt(memdc, 0, 0, w, h, hdc, rc.left, rc.top, CAPTUREBLT | SRCCOPY);
...

其次,不要使用GetDC(0)(以这种方式),因为它会导致资源泄漏.您必须保存从中获取的句柄GetDC并在以后释放它.例如:

HWND desktopWnd = GetDesktopWindow();
HDC hdc = GetDC(desktopWnd);
...
ReleaseDC(desktopWnd, hdc);

编辑:
或使用

HDC hdc = GetDC(0);
...
ReleaseDC(0, hdc);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/WINDOWS/detail/20929
推荐阅读
  • 这篇文章主要为大家详细介绍了pygame实现烟雨蒙蒙下彩虹雨,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下pygame烟雨蒙蒙,pygame下彩虹雨,pygame彩虹雨,深度学习,go,DevBox,在线流程... [详细]

  • 如何解决《操作系统如何将所有内核用于我的应用程序?》经验,为你挑选了0个好方法。multicore,vb,windows,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线... [详细]

  • 这篇文章主要介绍了python中关于pycharm选择运行环境的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下pycharm选择运行环境,python,pycharm,运行环境,深度学习,... [详细]

  • 如何解决《什么是学习曲线,为什么陡峭不难?》经验,为你挑选了6个好方法。taxonomy,emacs,深度学习,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,... [详细]

  • 如何解决《三元运算符如何工作?》经验,为你挑选了6个好方法。c,c#,java,ternary-operator,go,深度学习,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间... [详细]

  • 这篇文章主要介绍了Pytorch高效使用GPU的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧Pytorch,GPU,深度学习,算法,神经网络,服务器,pytorch,linux,windows,scala,分布式,p... [详细]

  • 如何解决《列出所有连续的子阵列》经验,为你挑选了2个好方法。python,arrays,python-3.x,windows,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,... [详细]

  • 如何解决《在cygwin中使用apm和atom编辑器命令的问题》经验,为你挑选了1个好方法。cygwin,atom-editor,windows,bash,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析... [详细]

  • 今天开始使用框架来进行开发,框架的手册也看了很大一部分,感觉没什么难度的!但是当我创建一个应用后,我想写一个用户登录的页面的时候,我竟然迷茫了……不知所措!我不知道检查用户是否已经登录的代码,应该php,thinkphp,mvc,go,ht... [详细]

  • 如何解决《JenkinsPipeline无法在Windows从站中执行SH命令文件》经验,为你挑选了1个好方法。windows,jenkins,jenkins-pipeline,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,... [详细]

  • 如何解决《如何使用GNAT制作的可执行文件更小?》经验,为你挑选了1个好方法。ada,gnat,windows,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,... [详细]

  • 如何解决《找到蒸汽游戏文件夹》经验,为你挑选了1个好方法。vb.net,steam,windows,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具... [详细]

  • 如何解决《如何仅对所选文件执行"dir>output.txt"》经验,为你挑选了1个好方法。batch-file,go,windows,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,jso... [详细]

  • 如何解决《IntelliJIdeaAndroid项目:Gradle项目同步失败》经验,为你挑选了0个好方法。android,intellij-idea,gradle,windows,DevBox,在线流程图,编程,编程问答,程序员,开发者工... [详细]

  • 如何解决《如何在不设置环境变量或不在Windows中导航MySQL服务文件夹的情况下使用cmd导航到MySQL提示符》经验,为你挑选了0个好方法。mysql,windows,cmd,batch-file,服务器,sql,DevBox,在线流... [详细]

  • 如何解决《Docker没有安装卷》经验,为你挑选了1个好方法。docker,docker-compose,windows,容器,html,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,un... [详细]

  • 如何解决《如何删除Azureblob容器中的文件夹》经验,为你挑选了4个好方法。azure,azure-storage,azure-storage-blobs,容器,windows,https,DevBox,在线流程图,编程,编程问答,程序... [详细]

  • 这篇文章主要介绍了Python深度学习之图像标签标注软件labelme详解,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下Python图像标签标注软件labelme,Python,labelm... [详细]

  • 这篇文章主要介绍了pytorch使用amp进行混合精度训练的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教pytorch,amp,混合精度训练,神经网络,python,深度学习,安全,scala,lua... [详细]

  • 如何解决《使Julia在LOAD_PATH中查找文件》经验,为你挑选了1个好方法。julia,macos,windows,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线... [详细]

相关标签
  

闽ICP备14008679号