Articles of gdi +

如何重新分配Gdiplus(GDI +)?

我需要重新分配gdiplus.dll v.1.1与我的应用程序,并确保使用这个特定的版本。 例如,Windows XP有系统版本的gdiplus.dll,但不能升级(v.1.0)。 但是,如果我把我的gdiplus.dll放到应用程序文件夹中,系统仍然在使用。 为什么? 如何解决这个问题? MSDN说 : 如果您正在将GDI +重新分发到本地不具有该版本GDI +的底层平台或平台,请将Gdiplus.dll安装到您的应用程序目录中。 这将它放在您的地址空间,但您应该使用链接器的/ BASE选项重新绑定Gdiplus.dll以防止地址空间冲突。 但我不知道如何rebad gdiplus.dll和什么,有人可以解释这一点? [编辑]似乎微软决定不运送Windows XP的GDI + 1.1,只有Vista等。 好身手。 谢谢你们

gdi对象被保存在哪里?

应用程序获取的gdi对象是否存储在为Windows内核预留的2GB虚拟内存空间中,位于应用程序虚拟内存空间中? 如果是这样,请你提供相关的链接。

处理巨大的位图

我需要在MFC / WinAPI应用程序窗口上显示位图。 位图大小可以是多种 – 例如40MB,100MB,500MB,700MB,1GB等等。 巨大的位图不适合应用程序窗口应显示滚动条。 问题是系统不能创build一个巨大的大小的位图,即使通过CreateFileMapping + CreateDIBSection分配内存。 有没有办法处理这种情况? 我想我需要把我的位图分成许多小块,但我不确定这是否正确。

C和Windows GDI中的双缓冲*框架*

背景 :我的客户端有一个非常广泛的专有表单库,它在C中被有效地实现了(实际上,它是一个专有的面向对象的语言,基本上封装了Windows控件,并通过SendMessage() , SetStyle() ) 我想解决的问题 :每当我在上述框架中实现的应用程序中拖动/调整顶级窗口(或拖动分离器)时,都会出现大量闪烁。 顶层窗口被重新绘制,并且它包含的任何控件都会重新绘制。 问题1 :有没有办法通过手术将双caching引入到表单库中。 特别是,我想知道是否可以使用标准的Windows GDI函数实现双缓冲。 例如 ,如果我可以使顶层窗口被双缓冲,那么顶层窗口的所有子窗口都会自动被双缓冲。 更好的select是能够在任意窗口中引入双缓冲,并让所有的子节点inheritance这个。 最好的解决scheme将以某种方式导致子控件的BeginPaint()函数将一个句柄返回到屏幕外缓冲区的DC中,这样我就不必为每个单独的控件类编写特殊的代码。 问题2 :是否有一种方法(如一组标志)导致通用Windows控件(编辑,button等)绘制自己双缓冲? 这将是一个更糟的解决scheme,而不是一个更通用的方法,只是无缝地给他们后备缓冲区,但也可以接受。 所有帮助非常感谢。 请让我知道,如果我能为你澄清任何事情。

使用GDI显示图像的红色通道

我有24位RGB图像。我只想用GDI在显示器上显示红色通道。 我应该使用调色板吗? 什么是使用策略? 请适当地指导我。

我需要为我的应用程序制作和加载多大的ImageList图标(考虑更高的DPI)?

我有一个CListCtrl控件(或Win32中的ListView ),它是用LVS_REPORT风格创build的。 我打算在其项目中显示图标: 但问题是我需要制作和加载多大的图标? 让我解释。 从旧的Win32示例中,我可以看到每个人都创build了具有15×15像素图标的图像列表。 但与这些问题是,它看起来像任何现代PC具有较高的DPI设置可怕像素化。 因此,我正在寻找一种dynamic的方式来确定适当的CListCtrl图像列表大小。 还有问题的第一部分,我最初应该制作的图标大小是多less? 编辑 PS:由于新闻部伸缩了,你怎么find它? 我目前正在使用以下方法: //No error handling for brevity HDC hDC = ::GetDC(hAppsMainWindowHandle); int nCx = ::GetDeviceCaps(hDC, LOGPIXELSX); int nCy = ::GetDeviceCaps(hDC, LOGPIXELSY); ::ReleaseDC(hAppsMainWindowHandle, hDC); //I technically get horizontal & vertical scaling — //can those be different? double scalingCx = (double)nCx / 96.0; //1.0 = 100% double […]

WIC“复制像素”调用之后的倍乘像素

我一直在寻找创buildPARGB32位图。 这似乎是必要的,以产生完全与后XP菜单项的图像。 这个例子http://msdn.microsoft.com/en-us/library/bb757020.aspx?s=6是非常有趣,但相当复杂,因为我以前很less使用过OLE接口。 然而,仔细研究了使用WIC和OLE的代码之后,我想我明白它是如何工作的。 混淆了我的一件事就是用户David Hellerman的评论。 总之,他说这个例子的function不完整。 它不考虑源图标中的任何潜在的alpha信息 – 如果有alpha数据,则必须在扫描ppvBuffervariables的同时逐个像素地进行预乘。 我的问题有两个部分。 如何在使用WIC而不是GDI时检测图标中是否存在alpha数据?如果存在,我该如何将它与像素预倍频?

什么是更新所有者绘制控制的最快方法?

我有一个所有者绘制控制显示数据。 数据随时间变化。 我需要find一个快速的方法来持续更新控制。 我尝试使用计时器,但问题是计时器本身每秒最多可以运行65帧。 而如果控制的油漆方法需要时间,fps变得相当低。 我试图从控制的绘画方法请求更新(InvalidateRect),这样,它每秒重绘控制数百次,但其余的UI不能正常工作(例如button不更新,工具提示被冻结等)。 什么是尽可能快地更新所有者绘制的控件的正确方法,仍然保持UI的响应? PS我需要这个与GDI工作,所以我不能使用OpenGL / Direct3D来显示我的数据。

C ++ Windows32 GDI填充三angular形

GDI中的FillRect的标准方式是 Rectangle(hdc, x_, y_, x_ + width_, y_ + height_); 但我怎么填三angular? 我将如何处理这个没有使用其他资源?

如何从HMENU获取菜单ID?

我试图覆盖WM_HELP消息我的对话窗口,当用户按下F1键。 该窗口有几个button,通过TrackPopupMenu显示上下文菜单,以及主菜单(顶部)。因此,这个窗口中不止一个菜单。 我可以在处理WM_HELP时捕获菜单消息,但是我需要知道哪个上下文菜单发送了这个消息: BOOL CMyDialog::OnHelpInfo(HELPINFO* pHelpInfo) { if(pHelpInfo->iContextType == HELPINFO_MENUITEM) { HMENU hMenu = (HMENU)pHelpInfo->hItemHandle; //How to get menu ID from HMENU? } //… } 所以我需要find一种方法从HMENU获取菜单资源ID – 这是用来创build它的: 任何想法如何做到这一点?