다중 모니터 시스템에서 두 모니터에 걸쳐있는 창이있는 경우 전체 창을 지울 수 없습니다. 대신 기본 창만 검은 색으로 그려집니다. 보조색은 원래의 흰색을 유지합니다. 이 행동을 본 사람이 있습니까?창이 여러 모니터에 걸쳐있는 경우 그려 낼 수 없습니다.
wxWidgets에 :
wxClientDC dc(this);
Erase(dc);
void SpriteWindowFrame::Erase(wxDC& dc)
{
dc.SetBackground(*wxBLACK_BRUSH);
dc.SetBrush(*wxBLACK_BRUSH);
dc.Clear();
//wxLogDebug("Erase called. Rect is %i, %i w:%i, h:%i", GetPosition().x, GetPosition().y, GetSize().GetWidth(), GetSize().GetHeight());
}
내부 dc.Clear() 함수,이 코드를
wxWidgets에 있습니다 : 디버거를 사용
void wxDC::Clear()
{
WXMICROWIN_CHECK_HDC
RECT rect;
if (m_canvas)
{
GetClientRect((HWND) m_canvas->GetHWND(), &rect);
}
else
{
// No, I think we should simply ignore this if printing on e.g.
// a printer DC.
// wxCHECK_RET(m_selectedBitmap.Ok(), wxT("this DC can't be cleared"));
if (!m_selectedBitmap.Ok())
return;
rect.left = -m_deviceOriginX; rect.top = -m_deviceOriginY;
rect.right = m_selectedBitmap.GetWidth()-m_deviceOriginX;
rect.bottom = m_selectedBitmap.GetHeight()-m_deviceOriginY;
}
#ifndef __WXWINCE__
(void) ::SetMapMode(GetHdc(), MM_TEXT);
#endif
DWORD colour = ::GetBkColor(GetHdc());
HBRUSH brush = ::CreateSolidBrush(colour);
::FillRect(GetHdc(), &rect, brush);
::DeleteObject(brush);
#ifndef __WXWINCE__
int width = DeviceToLogicalXRel(VIEWPORT_EXTENT)*m_signX,
height = DeviceToLogicalYRel(VIEWPORT_EXTENT)*m_signY;
::SetMapMode(GetHdc(), MM_ANISOTROPIC);
::SetViewportExtEx(GetHdc(), VIEWPORT_EXTENT, VIEWPORT_EXTENT, NULL);
::SetWindowExtEx(GetHdc(), width, height, NULL);
::SetViewportOrgEx(GetHdc(), (int)m_deviceOriginX, (int)m_deviceOriginY, NULL);
::SetWindowOrgEx(GetHdc(), (int)m_logicalOriginX, (int)m_logicalOriginY, NULL);
#endif
}
, 내가 확인 무엇 GetClientRect가 반환되었고 위치 0과 폭/높이가 th 인 rectange가 반환됩니다. 두 대의 모니터를 합친 것입니다. fillrect 함수가 두 개의 디스플레이에 그리기가 불가능할 수 있습니까?