#c #multithreading #mfc #sfml
#c #многопоточность #mfc #sfml
Вопрос:
Я пишу тестовое приложение SFML с MFC. Следующий код выполняется внутри бесконечного цикла в другом потоке, запущенном функцией AfxBeginThread() . (Потому что я хочу использовать SFML, как в чистом приложении WinAPI)
// 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(amp;r, amp;b); // draw a black rectangle
Результатом является белый фон с черным прямоугольником. Кажется, что SFML ничего не извлекает, кроме MFC.
Тот же код выше. Теперь я помещаю его в обработчик команд MFC (поэтому приведенный выше код рисует один кадр, когда я нажимаю кнопку один раз).
На этот раз фон окна желтый, а черный прямоугольник MFC исчез.
Теперь я совсем запутался. У меня два вопроса:
-
Почему SFML не выводится с первого раза? Это из-за потоковой обработки или инициализации?
-
Почему MFC не рисует, когда это делает SFML?
Комментарии:
1. IDK, если ЭТО ТАК, придерживается политики в отношении мультипостинга на нескольких сайтах, но вот тот же вопрос в другом месте: en.sfml-dev.org/forums/index.php?topic=15541.0
Ответ №1:
Не используйте CPaintDC. Он специализирован для использования только в обработчике сообщений WM_PAINT. Вместо этого вы можете использовать CClientDC.
Комментарии:
1. Большое вам спасибо. На этот раз они оба что-то рисуют.