草庐IT

c++ - 双缓冲? Win32 C++

我正在尝试实现双缓冲,但它似乎不起作用,即图形仍然闪烁。每次鼠标移动时都会调用WM_PAINT。(WM_MOUSEMOVE)下面粘贴了WM_PAINT:caseWM_PAINT:{hdc=BeginPaint(hWnd,&ps);//TODO:Addanydrawingcodehere...RECTrect;GetClientRect(hWnd,&rect);intwidth=rect.right;intheight=rect.bottom;HDCbackbuffDC=CreateCompatibleDC(hdc);HBITMAPbackbuffer=CreateCompatibleB

c++ - D3D11 : How to draw GDI Text to a GXDI Surface?(无 D2D)

我需要一些帮助来使用GDI和D3D11将文本绘制到纹理。我尝试使用D2D/DirectWrite,但它只支持D3D10而不是我需要的D3D11。到目前为止我尝试的一切都失败了......现在我想使用GDI方法来写入纹理。所以我用这个参数创建了一个纹理:Usage=D3D11_USAGE_DEFAULT;Format=DXGI_FORMAT_B8G8R8A8_UNORM;BindFlags=D3D11_BIND_SHADER_RESOURCE|D3D11_BIND_RENDER_TARGET;CPUAccessFlags=0;MiscFlags=D3D11_RESOURCE_MISC_G

c++ - 使用 GDI 创建透明位图?

我想在我的应用程序中实现一个分层系统,并且正在考虑创建一堆透明位图,向它们添加内容,然后将它们相互叠加,如果不将每个像素设置为(0,0,0,0)。我使用的是Purewin32,而不是MFC,谢谢。 最佳答案 透明是什么意思?如果您正在寻找部分(到完全)透明度,那么AlphaBlend是要使用的GDIAPI。用alpha加载位图很棘手-基本WindowsAPI支持用alpha加载位图的唯一格式是32bpp.BMP文件,每个字节的前8位有一个alphachannel-应该预乘较低的字节。可以使用GDI+加载各种带alpha的图像格式-P

c++ - 从内存缓冲区创建 HBITMAP

我有一个应用程序可以从数据库中加载一些blob数据,这些数据可以表示各种位图和图标的png格式或原始二进制数据。这被存储在std::vector我正在使用CImageList对象在TreeView、工具栏图像等中显示各种图像,但问题是从内存中的数据创建位图变得模糊,就像在执行以下操作时缺少像素一样:std::vectorbits;HBITMAPhbitmap=CreateBitmap(16,16,1,32,bits.data());为了暂时解决这个问题,我只是将vector中的data()写到一个临时文件中,然后使用LoadImage将其读回并从中创建HBITMAP。这非常有效,但不可

c# - 跟踪和降低 GD handle 的最佳方法是什么?

跟踪和降低GDI窗口句柄的最佳方法是什么。. 最佳答案 两个值得阅读的链接...ResourceLeaks:Detecting,Locating,andRepairingYourLeakyGDICodeGDIResourceLeaks 关于c#-跟踪和降低GDhandle的最佳方法是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/318154/

c++ - 如何将 GDI+ 状态转换为字符串?

实际上,主题。我还没有找到将GDI+Status(GDI+方法返回的错误状态)转换为字符串的任何标准方法,例如FormatMessage() 最佳答案 如果你想在GDI+Status中转换标签成字符串,那么你能做的最简单的事情就是:constchar*StatusMsgMap[]={"Ok",//StatusMsgMap[Ok]="Ok";"GenericError",//StatusMsgMap[GenericError]="GenericError";"InvalidParameter",//StatusMsgMap[Inval

c++ - 使非客户区无效

我有一个具有自定义边框/标题的窗口,为此我处理WM_NCPAINT消息。我的标题有两个背景,事件窗口的背景较亮,背景窗口的背景较暗。但在某些情况下,例如当窗口失去/获得焦点时,我的标题没有更新,所以我以错误的背景结束。到目前为止,我已经处理了WM_NCACTIVATE,并发送了一个RedrawWindow(hwnd,NULL,NULL,RDW_FRAME|RDW_INVALIDATE),但这会导致整个窗口重新绘制。您对此有什么建议吗? 最佳答案 覆盖非客户区总是充满危险。似乎窗口管理器为优化做了很多假设。显然它可以完成,请参阅Off

windows - 如何解决 winforms 错误 "A generic error occurred in GDI+. "?

我在我的C#.netwin表单应用程序中遇到以下异常。AgenericerroroccurredinGDI+.atSystem.Drawing.Graphics.CheckErrorStatus(Int32status)atSystem.Drawing.Graphics.DrawRectangle(Penpen,Int32x,Int32y,Int32width,Int32height)atWeifenLuo.WinFormsUI.Docking.DockWindow.OnPaint(PaintEventArgse)atSystem.Windows.Forms.Control.Paint

c++ - 如何拦截透明窗口的鼠标事件?

我有一个透明窗口(使用WS_EX_LAYERED创建),我想接收零阿尔法区域的鼠标事件。据我所知,我可以:1)使用鼠标Hook2)用几乎完全透明的颜色绘制背景(不透明度为1)但是,第一个解决方案很耗时,第二个解决方案会减慢我的渲染时间,因为我的窗口几乎在整个桌面上都被拉伸(stretch)了,而且此时大部分像素都是完全透明的。是否有其他方式接收这些鼠标事件? 最佳答案 根据MSDN:Hittestingofalayeredwindowisbasedontheshapeandtransparencyofthewindow.Thisme

java - 如何只获取窗口的可见部分(Windows、gdi32、user32 等)

我想在windows中只获取窗口的可见部分,作为一个区域。只想获取用户看到的区域。当然,以编程方式。这是一个例子。我有以下窗口组成:+------------------------------------------+|||+=============+|||||||A+--------------------------+|||||C||B|||+--------------------------+||||+-----------||----------------+||+-------------+假设我只对窗口A感兴趣。那么我需要的是一个看起来像这样的区域的句柄:+=====