Опираясь на рук нарисовать картину управления
я конвертирую свой код из vb в c++, есть несколько динамических точек, которые используются для рисования различных фигур.
в vb они имеют такие свойства, как .ScaleWidth, .ScaleHeight , .ScaleTop,. ScaleLeft.
то, что они сделали, - это масштабирование в соответствии с шириной и высотой, используя эти свойства, и рисование точек(фигур) на поле изображения в vb.
но в mfc у меня есть все необходимые входные точки, но когда я рисую, я не могу рисовать правильно или правильно. пожалуйста, помогите мне, я не в состоянии правильно масштабировать, пожалуйста, помогите мне.
Что я уже пробовал:
void CPDlgToolPreview::S_SetDrawingScale() { short i; float lnMaxX; float lnMaxY; float lnMinX; float lnMinY; const int BigNumber = 1000000000; float lnWidth; float lnHeight; lnMaxX = (float)(-BigNumber); lnMaxY = (float)(-BigNumber); lnMinX = (float)(BigNumber); lnMinY = (float)(BigNumber); for (i = 0; i < mlPoints; i++) { if (moPts[i].X > lnMaxX) lnMaxX = (float)(moPts[i].X); if (moPts[i].Y > lnMaxY) lnMaxY = (float)(moPts[i].Y); if (moPts[i].X < lnMinX) lnMinX = (float)(moPts[i].X); if (moPts[i].Y < lnMinY) lnMinY = (float)(moPts[i].Y); } lnWidth = lnMaxX - lnMinX; lnHeight = lnMaxY - lnMinY; CRect cRect; m_cPreview.GetClientRect(&cRect); if ( lnWidth / cRect.Width() > lnHeight / cRect.Height() ) { // Scale according to items width nScaleWidth = lnWidth*1.2; nScaleHeight = cRect.Height() *nScaleWidth / cRect.Width(); } else { // Scale according to items height nScaleHeight = lnHeight*1.2; nScaleWidth = cRect.Width() *nScaleHeight / cRect.Height(); } nScaleleft = -nScaleWidth / 2; nScaletop = -((nScaleHeight - lnHeight) / 2) - lnHeight; }
for (short i = 2; i < mlPoints; i++) { DrawLine(m_cPreview, moPts[i].X , moPts[i].Y); }
от Void DrawLine(от cwnd *WND, что инт Х1, У1 инт, инт Х2, У2 инт, инт РГБ)
{
CDC *cdc = wnd- & gt;GetDC();
CPen *oldPen = cdc- & gt;SelectObject(new CPen(0, 3, rgb));
cdc- & gt;MoveTo(x1, y1);
cdc- & gt;LineTo(nCurrentx = x2, currenty= y2);
удалить (CPen *)cdc- & gt;SelectObject(oldPen);
wnd - & gt;ReleaseDC(cdc);
}
где использовать эти scaleleft, nScaleHeight и т. д., Чтобы получить правильную форму.