使用VC++绘制坐标系
2016-03-22 19:22
501 查看
首先打开VC++,新建一个单文档应用程序;
按下图,为View类添加消息处理函数,变更单文档窗体背景色为黑色;
在菜单中添加如下菜单;
为菜单添加消息处理函数;添加在View类中;
在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);//恢复先前的画笔
}
三种坐标系效果分别如下;箭头尚未画出;下回分解;如果未见到画的线,可检查坐标点计算是否正确;
按下图,为View类添加消息处理函数,变更单文档窗体背景色为黑色;
在菜单中添加如下菜单;
为菜单添加消息处理函数;添加在View类中;
在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中CDC、HDC、pDC区别与联系及相互转换
- VC实现获取当前正在运行的进程
- vc中SendMessage自定义消息函数用法实例
- VC实现让关闭按钮成灰色不可用的方法
- VC++中的字体设置方法详解
- VC程序设计中CreateProcess用法注意事项
- VC实现批量删除指定文件的方法
- vc中使用SendMessage自定义消息函数
- vc提示unexpected end of file found的原因分析
- vc获取计算机名和ip地址的方法
- VC6.0实现读取Excel数据的方法
- VC下通过系统快照实现进程管理的方法
- VC实现Windows多显示器编程的方法
- VC下实现fopen支持中文的方法
- 解析VC中预编译头文件的深入分析
- VC WinExec打开指定程序或者文件的方法
- VC中CWinThread类以及和createthread API的区别分析
- VC++开发中完美解决头文件相互包含问题的方法解析
- 基于VC实现的网络监听功能程序实例
- 浅析VC++中的头文件包含问题