使用VC++绘制坐标系

首先打开VC++,新建一个单文档应用程序;

使用VC++绘制坐标系_第1张图片

 

按下图,为View类添加消息处理函数,变更单文档窗体背景色为黑色;

使用VC++绘制坐标系_第2张图片

 

在菜单中添加如下菜单;

使用VC++绘制坐标系_第3张图片

 

为菜单添加消息处理函数;添加在View类中;

使用VC++绘制坐标系_第4张图片

 

在View类头文件中添加三个成员变量;

int zbtype;//坐标系类别
int w,h; //存储窗口宽和高
int w2,h2; //存储窗口宽和高的一半

 

在View类构造函数中初始化成员变量;

CZbdemoView::CZbdemoView()
{
// TODO: add construction code here
zbtype=1;

w=0;

h=0;
w2=0;
h2=0;
}

 

三个菜单的消息处理函数中更改坐标系类型,然后刷新窗口;

void CZbdemoView::OnMenuitem32771() 
{
// TODO: Add your command handler code here
zbtype=1;
Invalidate();
}


void CZbdemoView::OnMenuitem32772() 
{
// TODO: Add your command handler code here
zbtype=2;
Invalidate();
}


void CZbdemoView::OnMenuitem32773() 
{
// TODO: Add your command handler code here
zbtype=3;
Invalidate();
}

 

改变窗口背景为黑色的代码;

BOOL CZbdemoView::OnEraseBkgnd(CDC* pDC) 
{
// TODO: Add your message handler code here and/or call default


CRect rectClient;
    GetClientRect(&rectClient);


    pDC->FillSolidRect(&rectClient, RGB(0,0,0) );
    return TRUE;

//return CView::OnEraseBkgnd(pDC);
}

 

在View类OnDraw函数中按坐标系类别绘制坐标系;

void CZbdemoView::OnDraw(CDC* pDC)
{
CZbdemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CPen pen(PS_SOLID,1,RGB(255,0,0));//构造画笔对象
CPen *pOldPen;
pOldPen=pDC->SelectObject(&pen);

RECT rect1;
GetClientRect(&rect1);
w=rect1.right;
h=rect1.bottom;
w2=rect1.right/2;
h2=rect1.bottom/2;


switch(zbtype)
{
case 1:
pDC->MoveTo(0,h2);
pDC->LineTo(w,h2);
pDC->MoveTo(w2,0);
pDC->LineTo(w2,h);
break;
case 2:
pDC->MoveTo(6,h-6);// 距离边缘6个像素
pDC->LineTo(w,h-6);
pDC->MoveTo(6,6);
pDC->LineTo(6,h-6);
break;
case 3:
pDC->MoveTo(6,h-6);// 距离边缘6个像素
pDC->LineTo(w,h-6);
pDC->MoveTo(w2,0);
pDC->LineTo(w2,h-6);
break;

}

pDC->SelectObject(pOldPen);//恢复先前的画笔
}

三种坐标系效果分别如下;箭头尚未画出;下回分解;如果未见到画的线,可检查坐标点计算是否正确;

使用VC++绘制坐标系_第5张图片

 

使用VC++绘制坐标系_第6张图片

 

使用VC++绘制坐标系_第7张图片

你可能感兴趣的:(VC++,算法)