4
나는이와 사투를 벌인거야
을C++는 : 나는 GDI +를 사용하여 PluginWindowWin (Firebreath)에 비트 맵을 그릴 할 Firebreath
을 사용하여 둘 이상의 인스턴스에서 비트 맵을 그리기; 나는 2 개 인스턴스를 만들 경우
using namespace Gdiplus;
Graphics graphics(hwnd);
graphics.DrawImage(image, 0, 0, 400, 400);
이미지에는 GDIPlus :: 이미지, 그것이 잘 작동 되나 : 그것을 위해 나는, 타이머가 지금은 WM_PAINT 메시지를 시뮬레이션하고, 내부 코드는 플러그인 (두 개의 다른 HWND) 중 하나에서 그릴 것입니다.
예상되는 동작입니까? GDI +는 HWND에서 만든 하나의 컨텍스트에서만 그리는 것입니까?
감사합니다.
감사합니다. 이미 문제를 해결했습니다. 방법? 음, 타이머를 더 이상 사용하지 않고 대신 FireBreath의 Refresh 이벤트를 사용합니다. 왜 타이머 내부가 아닌 이벤트 내부에서 일하는 것이 나를위한 완벽한 수수께끼로 남아 있습니다. –
이벤트 처리기는 윈도우 관련 스레드 또는 상태에서 새로 고침 이벤트를 전달할 가능성이 높습니다. 스레드 ID, 창 및 DC 핸들을 이벤트 처리기에서 인쇄하여 해답을 얻을 수 있습니다. – Sam
맞습니다. 나는 몇 가지 검사를하고 당신이 말하는 것과 똑같은 것을 발견했습니다. RefresheEvent가 실행되면 (FireBreath에서 발생) RefreshheEvent가 창을 그릴 준비가 된 것처럼 보입니다 (WM_PAINT). 하지만 (타이머를 사용하여) 그림을 강제로 표시하려고하면 문제가 나타납니다. 시도한 몇 가지 방법 : GetDC(), Graphics.GetHDC() 및 BeginPaint(); 모든 반환 다른 HDCs; 플러그인의 다른 인스턴스에서 작동하는 유일한 플러그인은 BeginPaint() ... EndPaint()입니다. 이 문제에 대해 더 많은 것을 알았을 때 나는 다른 누구도 똑같은 문제가있을 경우 질문을 편집 할 것입니다. 감사! –