【问题标题】:SFML draws nothing from another thread, and can SFML coexist with GDI?SFML 没有从另一个线程中汲取任何东西,SFML 可以与 GDI 共存吗?
【发布时间】:2014-08-06 10:10:09
【问题描述】:

我正在使用 MFC 编写一个 SFML 测试应用程序。以下代码在由 AfxBeginThread() 函数启动的另一个线程中的无限循环内运行。 (因为我想像在纯 WinAPI 应用程序中一样使用 SFML)

// SFML Window and View were initialized using CView's HWND
// Use SFML to draw
sf::Color back(255, 255, 0); // a yellow background
_psfwnd->clear(back);
_psfwnd->display();

// Then use MFC GDI functions to draw
CWnd* pwnd;
pwnd = CWnd::FromHandle(_psfwnd->getSystemHandle()); // It seems that the HWND is valid
CPaintDC dc(pwnd);
CRect r(10, 10, 100, 100);
CBrush b(0xFF000000);
dc.FillRect(&r, &b);    // draw a black rectangle

结果是带有黑色矩形的白色背景。似乎 SFML 只画了 MFC。

上面的代码相同。现在我将它放入 MFC 命令处理程序中(因此,当我单击一次按钮时,上面的代码会绘制一帧)。

这次窗口背景是黄色的,MFC 黑色矩形消失了。

现在我很困惑。我有两个问题:

  1. 为什么 SFML 第一次不绘制?是因为线程,还是初始化?

  2. 为什么 MFC 不绘制而 SFML 绘制?

【问题讨论】:

标签: c++ multithreading mfc sfml


【解决方案1】:

不要使用 CPaintDC。它专门用于仅在 WM_PAINT 消息处理程序中使用。您可以改用 CClientDC。

【讨论】:

  • 非常感谢。这次他们都画了一些东西。
猜你喜欢
  • 1970-01-01
  • 2020-09-16
  • 2014-04-29
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 2013-10-04
  • 2016-03-08
相关资源
最近更新 更多