草庐IT

winapi: GetUpdateRect() with bRepaint TRUE in WM_PAINT 不清除绘画区域,但 InvalidateRect() 在 WM_PAINT 之外?

我的自定义绘图区的WM_PAINT看起来像这样://TRUEtoclearthebackgroundif(GetUpdateRect(hwnd,&r,TRUE)==0)return;//noupdaterect;donothingdc=BeginPaint(hwnd,&ps);//checkreturn//paintsomeRGBAimagedatawithGDI+EndPaint(hwnd,&ps);(暂时忽略向GDI+发送HDC。)我在这里使用GetUpdateRect()而不是从BeginPaint()获取更新矩形,因为我总是想在空白Canvas上绘制,尤其是因为我正在做alph

windows - 针对 2D 游戏的大多数 Windows 版本?

如果要为大多数版本的Windows编写游戏代码,应该使用哪个API?我知道DirectDraw可以从NT4及更高版本运行(尽管DirectDraw是在NT4上使用GDI模拟的)。但是,我听说DirectDraw在较新版本的Windows中已被弃用?我可以恢复到只使用GDI,但是很难完全消除闪烁和撕裂,因为没有在缓冲区之间翻转的双缓冲。我应该选择Direct3D还是DirectDraw?或者有什么方法可以完全消除GDI中的闪烁?如果Direct3D是答案,那么大多数平台支持哪个版本? 最佳答案 除非您确定您永远不想将您的游戏移植到任何

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

我需要使用我的应用程序重新分发gdiplus.dllv.1.1,并确保使用这个特定版本。例如。WindowsXP有系统版本的gdiplus.dll但不能升级(v.1.0)。但是如果我把我的gdiplus.dll放到应用程序文件夹中,系统仍然使用。为什么?如何解决?MSDNsays:IfyouareredistributingGDI+toadownlevelplatformoraplatformthatdoesnotshipwiththatversionofGDI+natively,installGdiplus.dllinyourapplicationdirectory.Thisputs

windows - 在 Windows 中截取屏幕截图的最快方法是什么?

在Windows中捕获屏幕截图的最快方法是什么?一个司机?使用DirectX? 最佳答案 我认为最快的方法是读取显卡内存的映射区域...只是一个想法,从未尝试过。 关于windows-在Windows中截取屏幕截图的最快方法是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4975333/

windows - gdi对象保存在哪里?

应用程序获取的gdi对象是否存储在应用程序虚拟内存空间中为Windows内核保留的2GB虚拟内存空间?如果有,请提供相关链接 最佳答案 它们存储在内核中,参见MarkRoussinovich'sblogentryonUSERandGDIobjects. 关于windows-gdi对象保存在哪里?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8457587/

windows - 处理巨大的位图

我需要在我的MFC/WinAPI应用程序窗口上显示位图。位图大小可能不同——例如40MB、100MB、500MB、700MB、1GB等等。不适合应用程序窗口的巨大位图应使用滚动条显示。问题是即使通过CreateFileMapping+CreateDIBSection分配内存,系统也无法为一些巨大的尺寸创建位图。是否有处理此类案例的方法?我想我需要将我的位图分成许多小块,但我不确定这是正确的方法。 最佳答案 您无法创建多大尺寸的位图?您可能会遇到的限制是虚拟地址空间,对于32位代码,虚拟地址空间为2GB、3GB或4GB——具体取决于环

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

背景:我的客户有一个非常广泛的专有表单库,它在C中有效地实现(实际上,它是一种专有的面向对象的语言,基本上包装Windows控件并与它们交互SendMessage()、SetStyle()等)我要解决的问题:每当我在上述框架中实现的应用程序中拖动/调整顶层窗口(或拖动拆分器)时,都会出现大量闪烁。顶层窗口被重新绘制,它包含的任何控件都会重新绘制。问题1:有没有办法通过外科手术将双缓冲引入表单库。特别是,我想知道是否可以使用标准WindowsGDI函数实现双缓冲。例如,如果我可以使顶层窗口进行双缓冲,这样顶层窗口的所有子窗口也自动进行双缓冲绘制。一个更好的选择是能够在任意窗口上引入双缓冲

c# - 有没有办法在不使用 GDI+/WinForms "Graphics"类的情况下检索设备的 DPI?

是否可以使用nativewinapi调用从c#获取我的设备DPI?我知道如何从Windows窗体应用程序获取dpi,我当前的代码是:Graphicsg=Graphics.FromImage(newBitmap(10,10));varscaleX=g.DpiX/96.0f;varscaleY=g.DpiY/96.0f;我想知道这是否是一个可以使事情变得更容易的winapi调用。 最佳答案 aWMIQuerytotheWin32_DesktopMonitorclass呢??PixelsPerXLogicalInchDatatype:ui

windows - 使用GDI显示图像的红色 channel

我有24位RGB图像。我只想使用GDI在显示器上显示红色channel。我应该为此使用调色板吗?使用什么策略?请适本地指导我。 最佳答案 最快的方法是使用BitBlt。创建另一个与RGB图像大小相同的24位位图。用纯红色填充它。然后使用BitBlt和SRCAND。如documentation中所述这个CombinesthecolorsofthesourceanddestinationrectanglesbyusingtheBooleanANDoperator. 关于windows-使用G

windows - WIC 'Copy Pixels' 调用后预乘像素

我一直在研究创建PARRGB32位图。这似乎是生成完全适用于XP后菜单项的图像所必需的。这个示例http://msdn.microsoft.com/en-us/library/bb757020.aspx?s=6非常有趣但相当复杂,因为我以前很少使用OLE接口(interface)。然而,在仔细研究了使用WIC和OLE的那段代码之后,我想我明白了它是如何工作的。让我感到困惑的一件事是用户“DavidHellerman”的评论。总而言之,他说这个示例功能并不完整。它不考虑源图标中任何潜在的alpha信息-如果有alpha数据,则必须在扫描ppvBuffer变量时逐个像素地进行预乘。我的问题