VC++(MFC)实现直角坐标系的输出

VC++(MFC)实现直角坐标系的输出,第1张

void CTestDlg::OnButtonDraw()

{

DrawCoordinate(CPoint(100,250), 200, 6, 150, 10)

}

// 顶点坐标, x轴长度, x轴刻度数(含原点), y轴长度, y轴刻度数(含原点)

void CTestDlg::DrawCoordinate(CPoint point, int xLen, int xNum, int yLen, int yNum)

{

int x = xLen + 5

int y = yLen + 5

CDC *pDC = GetDC()

pDC->SetBkMode(TRANSPARENT) // 设置透明

pDC->MoveTo(point)

pDC->LineTo(CPoint(point.x+x, point.y)) // 绘制x轴

pDC->MoveTo(point)

pDC->LineTo(CPoint(point.x, point.y-y)) // 绘制y轴

pDC->TextOut(point.x-5, point.y+5, _T("0"))

pDC->TextOut(point.x+x+20, point.y-5, _T("X"))

pDC->TextOut(point.x-5, point.y-y-20, _T("Y"))

// 计算刻度宽度

int x_width = xLen / xNum

int y_width = yLen / yNum

int x_pixel = 0 // 当前x坐标

int y_pixel = 0 // 当前y坐标

for(int i=0i<xNumi++)

{

x_pixel = i*x_width

pDC->MoveTo(CPoint(point.x+x_pixel, point.y-2)) // 绘制x轴刻度

pDC->LineTo(CPoint(point.x+x_pixel, point.y+4))

if(i >0)

{

CString str

str.Format(_T("%d"), i)

pDC->TextOut(point.x+x_pixel-2, point.y+3, str)

}

}

for(int j=0j<yNumj++)

{

y_pixel = j*y_width

pDC->MoveTo(CPoint(point.x-2, point.y-y_pixel)) // 绘制y轴刻度

pDC->LineTo(CPoint(point.x+4, point.y-y_pixel))

if(j >0)

{

CString str

str.Format(_T("%d"), j)

pDC->TextOut(point.x-15, point.y-y_pixel-6, str)

}

}

ReleaseDC(pDC)

}

当然你也可以通过定义POINT数组,数组中记录每个点的坐标,接着使漏耐用CDC的PolyLineTo或PolyLine等多边形尘搜竖函数进行线段描绘,效果派大一样,看你喜欢哪种了

int x=GetSystemMetrics(SM_CXSCREEN)得到x坐标

int y=GetSystemMetrics(SM_CYSCREEN)得到y坐标

(模简x/2 y/2) 就是 屏幕中心的耐启坐标

此方法就是得到屏幕的分辨率。右下角的 坐标 就是 当前分辨率的旦亩裤值。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12258701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存