为何GDI+显示文字有时正常显示,有时不显示?

用gdi+在屏幕上显示文字,为何有时正常显示,有时不显示?

// 利用容器,输出显示文字 
Gdiplus::RectF dest(rc.X, rc.GetBottom(), rc.Width, -rc.Height);
Gdiplus::GraphicsContainer container = pGraphic->BeginContainer(dest, rc, m_FontSet->GetUnit());
pGraphic->DrawString(pText, -1, pFont, Gdiplus::PointF(0,0), pBrush);
pGraphic->EndContainer(container);

pText或pFont或pBrush有时无效

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/268884
  • 这篇博客也不错, 你可以看下GDI简单介绍
  • 除此之外, 这篇博客: GDI和GDI +之间的互操作性中的 在位图所支持的GDI+图形对象上使用GDI 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 当为位图支持的Graphics对象而不是屏幕调用Graphics::GetHDC()时,会创建一个内存HDC,并创建一个新的HBITMAP并将其选入内存HDC中。这个新的内存位图不是使用原始位图的图像进行初始化,而是使用一个标记模式,它允许GDI +跟踪对位图的更改。通过使用GDI代码对内存位图所做的任何更改,都会在对哨兵模式的更改中变得明显。当Graphics::ReleaseHDC()被调用时,这些更改被复制回原始位图。由于内存位图未用位图的图像进行初始化,因此以这种方式获得的HDC应被视为“只写”,因此不适合与ROP一起使用,其使用需要能够读取目标,如R2_XOR。此外,这种方法的性能成本也很高,因为GDI +必须将更改复制回原始位图。