2009-08-10 2 views
0

CView 파생 클래스를 사용하여 주로 3D 벡터 데이터와 트루 타입 텍스트 인 표시를 렌더링하는 시각적 C++ 응용 프로그램이 있습니다. 사용 된 매핑 모드는 MM_ANISOTROPIC 또는 MM_LOMETRIC입니다. 인쇄 및 데이터 플로팅에 동일한 코드를 사용하고 비 정사각형 화면 픽셀 문제를 극복해야하므로 MM_TEXT를 사용할 수 없습니다.MM_TEXT 이외의 매핑 모드로 CreateCompatibleDC 사용

현재 드로잉 코드는 CViews OnDraw 메서드와 제공된 CDC 개체를 사용하여 화면에 직접 그려집니다. MS documentation 및 다른 곳에 설명 된대로 CreateCompatibleDC/CreateCompatibleBitmap 조합을 사용하여 그림을 비트 맵으로 바꾸고 화면에 비트 맵을 블리팅하려고합니다.

문제는 DC가 MM_TEXT 이외의 매핑 모드와 호환되지 않기 때문에 내보기가 거꾸로되어 잘못된 배율로 렌더링된다는 것입니다. 조사는 다음을 보여줍니다.

void CMyView::OnDraw(CDC *pDC) 
{ 
    CDC MyDC = CreateCompatibleDC(pDC); // Create a new memory DC; 
    int a = pDC->GetMapMode(),b = MyDC.GetMapMode(); 
' 
' 
' 
} 

a = 2 
b = 1 

MyDC에서 SetMapMode를 호출하면 디스플레이가 완전히 검은 색으로 표시됩니다. 비트 맵으로 그리려면 MM_TEXT에 맞게 코드를 다시 작성해야합니까, 아니면이 문제를 해결할 다른 방법이 있습니까?

+1

호환되는 DC로 비트 맵을 선택하기 전이나 후에 매핑 모드를 설정하고 있습니까? ? 올바른 유형의 비트 맵을 만들지 못했거나 전혀 선택하지 않은 경우 검정색 결과를 보았습니다. 비트 맵 차원이 매핑 모드로 해석되는지 궁금합니다. –

답변

2

SetWindowExtSetViewportExt으로 전화해야 할 수도 있습니다. 이전에 비트 맵 DC와 함께 MM_ISOTROPIC을 사용 했으므로 OK 일을했습니다. 이후 GDI +로 이식 된 이후의 코드가 없습니다.

관련 문제