Articles of gdi +

PrintWindow – 捕获子窗口?

我想知道如何PrintWindow子窗口? 为什么? 因为在文件夹视图的一些窗口,它只捕获文件夹的框架,但没有和SysListView32项目,所以我想我必须单独捕获,或以某种方式强制它自己绘制,我试着用WM_PAINT和WM_SYSCOLORCHANGE SendMessage但没有成功。 提前致谢。 编辑:这是同样的问题,但没有回答…. http://www.vbforums.com/showthread.php?t=555250

如何正确处理WS_EX_COMPOSITED?

有人可以解释如何创build处理由WS_EX_COMPOSITED引起的错误的WndProc(这个错误在一些控件上是无止境的WM_PAINT)? 所有我用的WS_EX_COMPOSITED是当我的应用程序窗口被隐藏,可以采取它的屏幕截图(如果WS_EX_COMPOSITED没有设置,PrintWindow失败),我得到屏幕截图,但CPU使用率始终是99%。 这里是我从谷歌发现的信息: 永不结束WM_PAINT循环与ATL CWindowImpl http://forums.codeguru.com/showthread.php?t=483719 但不给我很亮…我添加到我的WndProc唯一的变化是以下几点: if(Msg==WM_PAINT||Msg==WM_NCPAINT||Msg==WM_ERASEBKGND) { return DefWindowProc(hWnd,Msg,wParam,lParam); } 它会降低CPU使用率,但不能正确绘制所有控件。

PrintWindow扭曲窗口

我尝试捕捉窗口的截图并将其保存到video。 我使用PrintWindow()捕捉屏幕截图。 当我的应用程序正在运行,并且其他窗口移动到被捕获的窗口上时,我看到捕获的窗口变形(窗口移动的痕迹保留在捕获的窗口上)。 但保存的video不会有任何扭曲。 我怀疑可能需要重新绘制窗口,并在PrintWindow()之后尝试使用InvalidateRect() , UpdateWindow() PrintWindow() ,但是没有任何帮助。 这个问题在所有的系统上都没有被观察到。 我在Vista系统上有问题,而不是在Win7上。 我怀疑这种情况发生在窗口拖动时连续绘制的系统上,而不是在窗口拖动时只有黑色边框的系统上。

Windows:GDI可以处理创build它的过程吗?

我正在试图追查我的SWT应用程序中只有Windows的问题的原因,有时会遇到以下错误: org.eclipse.swt.SWTError: No more handles 跟踪引发此错误的行显示它调用CreateWindowEx Windows API函数,如果没有GDI句柄可以失败。 在Windows Server 2008构build服务器上通过远程桌面运行应用程序时,定期发生此错误。 到目前为止,我发现并修复了一些SWT Image和Font对象的泄漏,其中一些会导致每次调用应用程序时泄漏数百个GDI句柄。 但是,我正在努力validation(使用故意使用大量句柄的testing应用程序),我已经解决了这个问题。 我的testing应用程序达到每个进程10,000个GDI句柄的限制。 连续运行不会导致问题; 同时运行两个或三个。 所以,最后是我的问题: 在任何情况下,是否有可能在Windows上使用GDI来处理创build它的过程? 如果是这样,是否有一个工具可以用来查看这些“泄漏”的GDI句柄的数量?

如何以推荐的方式访问DWM的“桌面”界面?

经典的GDI访问方式 – GetDC(HWND_DESKTOP) / GetWindowDC(HWND_DESKTOP) – 已经被微软公司的Greg Schechter拒绝,因为DWM导致的屏幕外渲染和直接传输到帧缓冲。 此外, Platform SDK参考build议避免写入访问。 但是,引用的资料都没有提供替代的build议。 那么,我应该用什么来代替传统的GDI方法来实现DWM友好?

gdi +在Graphics对象上绘制图像时出现的一般错误

考虑下面的代码在Windows服务中运行。 Graphics g = Graphics.FromImage(printImage); for (int rows = 1; rows <= thumbRows; rows++) { for (int cols = 1; cols <= thumbColumns; cols++) { using (Image thumbImage = new Bitmap(resourceQueue.Peek())) { g.DrawImage(thumbImage, targetRect, sourceRect, GraphicsUnit.Pixel); resourceQueue.Dequeue(); if (resourceQueue.Count == 0) break; } } } 代码在将图像缩小到另一图像之后绘制图像列表。 它在大多数情况下工作正常,但有时会在图像thumbImage = new Bitmap的循环中间引发exception。 例外是“GDI +中发生了一般性错误”。 无论使用何种图像,都会在创build第13张图像后发生。 谷歌search后,似乎这是一个常见的问题,当保存文件,但这里的区别是没有文件被保存。 一个图像绘制在一个Graphics对象上。 […]

如何将位图旋转90度并获取有效的图元文件

我正在使用PlgBlt将Windows位图旋转90度以上。 当在屏幕上显示地图时,这工作正常,但检查由此过程组成的增强型图元文件显示旋转的位图完全丢失。 通过TextOut()输出的旋转文本(带有CreateFontIndirect())也从增强型图元文件中丢失。 一个简单的位图旋转/翻转例程结合StretchBlt()工作正常。 PlgBlt正在使用一个设备相关的位图,而一个增强的图元文件应该是设备无关的。 那可以吗?

有没有办法将窗口redirect(渲染)到“内存显示”?

我想制作一个Windows应用程序,其GUI将stream式传输到另一个设备(允许远程控制)。 重点是我不愿意依靠创buildWindows会话来隔离GUI I / O(1) 为了达到这个目的,我开始观察一些能够使用这个前提来启用远程访问的现有解决scheme,看看我是否能够从哪里开始。 其中一个解决scheme是Winflector (顺便说一句:它是免费的2连接)。 我对这个解决scheme感兴趣,因为它似乎(我猜)它只检测重绘区域。 我从我的观察中得出的结论是: 虽然stream式应用程序在本地login(在我的任务pipe理器中显示应用程序进程)本地在本地运行,但应用程序窗口似乎无法被创build – 至lessInspect不能获得任何窗口应用程序进程的信息/句柄 – 看起来像是“GUI StdOutredirect”。 显然,没有额外的桌面创build; 显然,没有安装镜像驱动程序。 使用Process Explorer ,我发现Winflector将一些线程添加到原始应用程序进程中。 我怀疑这是关于GUIredirect(由线程的名称); 该应用程序由Winflector服务器启动 – 也就是说,它具有关于CreateProcess参数的控制权。 在这种情况下最可能使用的技术是什么? Windows钩子? Windows消息拦截? 特殊显示驱动程序 内存设备上下文的sorting? 我应该从哪里开始研究以获得类似的方法? 任何关于这个主题的开源项目也将非常受欢迎。 PS:通过我的编程经验,这是一个完整的“新世界” – 对不起,如果我的问题是多余的/明显的/无意义的。 (1)也就是说,可以使用本地用户已经login的同一个会话生成,stream式传输并与远程客户端进行交互,而不会与IO冲突(例如,像普通的VNC那样)。 PS:在这一刻,我只关注输出 。

以编程方式更改屏幕色彩平衡

GDI32.DLL中用于更改Windows上颜色平衡的函数的名称是什么? 例如要更改设备伽马我需要使用SetDeviceGammaRamp [DllImport("GDI32.dll")] private unsafe static extern bool SetDeviceGammaRamp(Int32 hdc, void* ramp); 提前致谢。

wxPython:GDI资源在wxFrame.destroy()之后不会被释放

首先,对于我的语言感到抱歉,英语不是我的母语: – / 我有一些麻烦使用Windows的wxpython 2.8 / python 2.7。 我的应用程序使用wxPython现在是相当大的,并使用了很多小部件。 我的问题是:在for循环中,我打开一个框架作为variables( myVar = myFrame(…) ),并给它一些值/variables(如 – > myVar.setval('xx', 42) )。 然后,它会填充一些textareas,网格等从我的数据库中的一些请求(从子框架)。 在特性的最后,我的子框架生成一个pdf文件,并打印出来,然后用wx.Frame的原始self.Destroy()方法closures本身,而不是附加的。 一个接一个地创build许多帧,使用相同的variables(例如myVar )。 但是,最近,我发现了一些问题,在我的循环比以往更多的迭代…具有相同的configuration(相同的数据与数据库转储),它总是崩溃在同一时刻(而不是特定的数据),之后在我的循环中一定数量的迭代。 WxPython使用Windows允许的最大GDI量(错误1158)。 实际上,我的GDI资源来自被破坏的帧不会被释放! 我读到有一个被破坏的对象的队列,等待在wxPython中没有更多的事件在等待时真正被杀死,然后他们不会因为不断的工作(循环)而被释放。 在Linux上,没有这个问题,一切工作正常(但我需要它在Windows上)。 我试过wx.Yield方法,但没有改变…我看线程,但GUI小部件必须在wx主循环中使用… 如果你们有一个想法,那将是美好的! [已解决]我find的解决scheme是调用wx.Yield()释放未使用的资源。 但是这只能在linux上完美工作。 在Windows上,我需要调用wx.Frame.DestroyChildren()。 现在看起来好了:-)