首页 / 知识
关于Visual C ++:屏幕捕获在Vista中的MFC应用程序上不起作用
2023-04-16 19:33:00

Screen capture doesn't work on MFC application in Vista我们已经使用MFC构建了一些内部应用程序,并带有OpenGL绘制例程。它们都使用相同的代码在屏幕上绘制,然后打印屏幕或将其保存为JPEG文件。在Windows XP中一切正常,并且我需要找到一种使它们在Vista上运行的方法。 在我们的三个应用程序中,一切正常。在剩下的一个中,我可以获得窗口边框,标题栏,菜单和任务栏,但内部永远不会显示。就像我说的那样,这些应用程序使用完全相同的代码来写入屏幕并捕获窗口图像,而我看到的唯一区别似乎是可能与之相关的是,有问题的应用程序使用了MFC多文档界面,而该工作使用单个文档界面。 要么答案不在网上,要么我在谷歌搜索方面比我想象的要差。我在MSDN论坛上问,唯一得到的实用建议是使用GDI +而不是GDI,这没有什么不同。在给定窗口指针的情况下,我对捕获,打印或保存的代码的每一部分都尝试了不同的方法,因此显然这与窗口本身有关。我还没有使用SDI重建有问题的应用程序,而且我真的没有其他想法。 有人看到过这样的东西吗? 我得到的是四个应用程序。他们使用许多通用代码,并共享实际的.h和.cpp文件,因此我知道绘图和屏幕捕获代码是相同的。 有一个使用* pWnd的WindowtoDIB()例程,以及一个源矩形和目标大小。它看起来像经过稍微修改的Microsoft代码,并且我在Microsoft网站上的此文件中找到了其他功能。在我的四个应用程序中,三个可以很好地处理此问题,但一个不能。最明显的区别是问题之一是MDI。 在我看来,* pWnd是问题。从长远来看,我不是MFC专家,在我看来,问题可能是我们在SDI中设置了一个窗口,而在MDI中设置了多个。我可能将错误的* pWnd传递给该函数。 同时,尽管它仍无法在32位Vista机器上运行,但它已开始在64位Vista测试机上正常工作。我不知道为什么。自上次测试以来,我什么都没有改变,而且我认为其他人也没有。 (在32位版本上,"打印屏幕"键可以按预期工作,但不会将屏幕另存为JPEG。) 如果这是您想要的CView的内容,那么是的,那应该是正确的。如果这是整个屏幕的内容(至少是内容,没有工具栏和状态栏),则应将其传递给CMainFrame(这是可能已更改的默认名称,该名称是从CMDIFrameWnd派生的) )。 您可以发布WindowToDIB()的代码吗?我已经尝试过了,并且对我有用(TM),但是视图中没有OpenGL代码。尝试将以下窗口传递给WindowToDIB()函数:
CMainFrame *
看看你得到什么。 您的问题标题提及屏幕截图,但您的实际问题未提及。请详细说明。您可以对三个应用程序进行屏幕捕获,而对第四个应用程序不进行屏幕捕获吗?您可以使用其他可以捕获OpenGL / DirectX窗口的屏幕捕获软件。这些表面由窗口管理器直接处理,不会以简单的" PrtScn"显示。 切换到GDI +将无法解决,切换到SDI也不会解决。 最终,我们通过创建一个不同的OpenGL上下文并对其进行绘制来解决此问题。我们放弃了屏幕截图。 抱歉,我还是不明白。您试图让"打印屏幕"键在所有四个应用程序上都可以使用吗?或者,您正在尝试使WindowtoDIB()函数正常工作,该函数需要对应用程序本身进行"截屏"(来自您自己的应用程序),以便可以将其另存为图像文件? 另外,"打印屏幕键可以按预期工作,但不能将屏幕另存为JPEG"是什么意思?"打印屏幕"仅复制到剪贴板,粘贴在"画图"中会怎样? 如果WindowtoDIB()函数仅"捕获"传递给它的窗口,那么可以,您的MDI子窗口将不会显示。 每个窗口的内容都是DirectX曲面,并且只能由图形卡中的窗口管理器来组装。除非您关闭新界面(DWM)或专门用于从DWM进行屏幕捕获的代码,否则您将无法捕获此内容。 维基百科对桌面窗口管理器(DWM)有很好的描述。 |
最新内容
相关内容
linux文件异或命令?
linux文件异或命令?,数字,系统,工作,管理,命令,数据,网络,文件,第一,单位,基本linux命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目linux文件复制的命令?
linux文件复制的命令?,系统,文件,命令,目录,源文件,基本知识,位置,目标,选项,文件夹,在Linux中,要将指定源文件复制到目标文件,但不覆盖原有文linux写文件命令行?
linux写文件命令行?,工作,系统,命令,信息,名字,文件,目录,资料,标准,时间,linux命令编辑文件命令是什么linux常用命令有pwd命令、cd命令、ls命linux复制命令文件?
linux复制命令文件?,系统,文件,命令,目录,基本知识,源文件,目标,文件夹,路径,选项,linux怎么复制命令cp命令:用于复制文件或目录。语法如下:`baslinux下文件均分命令?
linux下文件均分命令?,管理,情况,系统,工作,信息,地址,命令,目录,单位,设备,Linux文件系统操作命令1、cat:可以显示文件的内容(经常和more搭配linux的文件替换命令?
linux的文件替换命令?,系统,工作,实时,命令,文件,批量,字符串,内容,方法,表示,linux命令行替换文件内容Linux下批量替换多个文件中的字符串的linux命令有两个文件?
linux命令有两个文件?,文件,代码,系统,命令,两个,内容,文件夹,光标,后方,文件名,在linux下我有两个文件夹w1,w2,怎样把它们合并到一个文件夹可linux查文件数量命令?
linux查文件数量命令?,系统,数据,电脑,命令,文件,信息,代码,对比,软件,第三,linux系统如何查看自己创建了多少文件夹为了实验,我打算总共创建 7linux命令去重文件?
linux命令去重文件?,系统,工作,命令,信息,数据,环境,代码,文件,目录,操作,Linux的命令行中一些文本操作技巧的实例分享1、把文件中所有的 findlinux写大文件命令?
linux写大文件命令?,服务,数据,第三,较大,基础,工具,设备,文件,大小,命令,linux拼接文件时出错文件过大)在windows下转换:利用一些编辑器如Ultralinux查询文件夹命令?
linux查询文件夹命令?,系统,软件,电脑,命令,文件,文件夹,单位,第三,档案,数据,linux文件夹的大小命令?1、最简单的查看方法可以使用ls -ll、lslinux多文件打包命令?
linux多文件打包命令?,系统,工具,时间,代码,文件,命令,文件夹,目录,指令,格式,Linux怎么用命令合并多个文件为一个将两个文件filetxt和filetxt