Code: Select all
void CTestDrawView::OnDraw(CDC* pDC)
{
CTestDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
///*//// Draw the bitmap ////////////////////////////////////////////////////////////////
CDC dcPicture;
dcPicture.CreateCompatibleDC(pDC);
CSize sizeBmp = pDoc->GetDocSize();
CBitmap* pOldBitmap = dcPicture.SelectObject(pDoc->GetBitmap());
pDC->SetStretchBltMode(COLORONCOLOR);
pDC->StretchBlt(0, 0, sizeBmp.cx, -sizeBmp.cy, &dcPicture, 0, 0, sizeBmp.cx, sizeBmp.cy, SRCCOPY);
pDC->SelectObject(pOldBitmap);
///*/////////////////////////////////////////////////////////////////////////////////////
///*//// Draw overlay /////////////////////////////////////////
CPen pen(PS_SOLID, 0, RGB(0,220,0));
CPen* pOldPen = pDC->SelectObject(&pen);
CPoint ptText(63, 53);
pDC->DPtoLP(&ptText);
pDC->SetBkMode(TRANSPARENT);
pDC->TextOut(ptText.x, ptText.y, _T("ABCDEFGH"));
pDC->SelectObject(pOldPen);
///*///////////////////////////////////////////////////////////
}
Unde cred ca e problema: acel punct, ptText, este convertit din unitati device in unitati logice cum ii trebuie metodei CDC::TextOut(...) ... pentru ca daca view-ul e marit mult, acele valori ptText.x = 63, ptText.y = 53 de exemplu (care sant date in unitati device), nu isi au corespondenta in unitati logice ...
Acest comportament poate fi vazut cu usurinta in proiectul atasat, dupa ce se mareste bitmap-ul cu mouse-wheel, cu tasta '+', sau marcand o zona a bitmap-ului cu right-button-down ...
Cum as putea rezolva aceasta problema ? Sa renunt la convertirea DPtoLP nu pot ... orice sugestie/idee ar fi foarte bine venita .... Multumesc.