C++ SFML不从另一个线程提取任何内容,SFML可以与GDI共存吗?

C++ SFML不从另一个线程提取任何内容,SFML可以与GDI共存吗?,c++,multithreading,mfc,sfml,C++,Multithreading,Mfc,Sfml,我正在用MFC编写一个SFML测试应用程序。以下代码在由AfxBeginThread()函数启动的另一个线程的无限循环中运行。(因为我想像在纯WinAPI应用程序中一样使用SFML) 结果是白色背景和黑色矩形。似乎SFML除了MFC之外什么也不画 上面的代码相同。现在,我将其放入MFC命令处理程序中(因此,当我单击一次按钮时,上面的代码将绘制一帧) 这次窗口背景为黄色,MFC黑色矩形消失 现在我很困惑。我有两个问题: 为什么SFML不第一次绘制?这是因为线程还是初始化 为什么MFC不绘制而SFM

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

结果是白色背景和黑色矩形。似乎SFML除了MFC之外什么也不画

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

这次窗口背景为黄色,MFC黑色矩形消失

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

  • 为什么SFML不第一次绘制?这是因为线程还是初始化

  • 为什么MFC不绘制而SFML绘制


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

    IDK如果是的话,它有一个关于多站点多点的策略,但在其他地方有一个相同的问题:非常感谢。这次他们都画了些东西。
    // 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