QQ登录

只需一步,快速开始

上位机VC MFC图形视窗缩放平移

[ 复制链接 ]

上位机VC MFC图形视窗缩放平移

上位机VC MFC图形视窗缩放平移

上位机VC MFC图形视窗缩放平移在进行图形方面编程时,绘图窗口的放大缩小平移是必不可少的功能,当前例程也实现这一功能,效果如图。点着中键移动鼠标可任意移动圆,鼠标滚动前面滚动,可放大缩小圆。点击工具条上四个按钮还可实现放大缩小,全屏显示圆,以及全屏显示鼠标绘制的矩形区域
要点提示
例程缩放平移的要点:显示在视窗上图元的几何坐标(如直线的两端点坐标)是经过转换后显示在窗口上的。通过函数实现转换
void CMy123View:PtoVP(float x,float y,int *X,int *Y)
{
  *X=(int)((x-m_xStart)/blc);
  if(m_MapMode==MM_TEXT)
  *Y=m_hScreen-(int)((y-m_yStart)/blc);
  else
  *Y=(int)((y-m_yStart)/blc)-m_hScreen;}

Blc为缩放比例尺,m_hScreen, m_hScreen为平移XY和偏移量,很明显只要修改这两个参数,刷新界面重新绘制就可实现图元的平移与缩放

实现功能
  1. 1.新建基于Cview的文档程序。
  2. 2.在视窗类中添加成员函数与变量
  3. enum ACTION_MODE{
  4.         ACTION_OFF,
  5.         ACTION_AREA_FILL,//框选区域全屏显示
  6.         ACTION_SCREEN_MOVE,//移动图元窗口
  7.         ACTION_ZOOM_IN,//放大图元窗口
  8.         ACTION_ZOOM_OUT,//缩小图元窗口
  9. };
  10. private:
  11.         ACTION_MODE m_ActionMode;//操作模式
  12.         CPoint m_FirstPt;//保存鼠标左键第一次点击
  13.         short  m_nNum;//保存鼠标左键点击次数
  14.         float m_xStart,m_yStart,m_xStartTemp,m_yStartTemp,blc; //绘制图形时的起点坐标和比例尺
  15.         int   m_hScreen,m_wScreen;        //当前视图的高度和宽度
  16.         int   m_MapMode;//当前映射模式
  17.         void DPtoVP(float x,float y,int *X,int *Y);//设备点转视窗点
  18.         void VPtoDP(int x,int y,float *X,float *Y);
  19.         void FitScreen();//全屏显示全部图元
  20.         void SetMoveScreenBasePt(CPoint pt);//设置移动基点
  21.         void MoveScreen(CPoint pt);//设置移动偏移点
  22.         void ZoomIn(CPoint point,float delta=1.25);//以基点位置放大
  23.         void ZoomIn(CRect rc);//全屏显示矩形内图元放大
  24.         void ZoomOut(CPoint point,float delta=1.25);//以基点位置缩小
  25.        
复制代码
  1. 3.初始化变量
  2. CMy123View::CMy123View()
  3. {
  4.         m_ActionMode =ACTION_OFF;
  5.         m_xStart=0;       
  6.         m_yStart=0;
  7.         blc=1.0;
  8.         m_MapMode=MM_TEXT;
  9.         m_nNum=0;
  10. }
  11. 在OnDraw函数中添加绘制图元的测试代码
  12. void CMy123View::OnDraw(CDC* pDC){
  13.         CMy123Doc* pDoc = GetDocument();
  14.         ASSERT_VALID(pDoc);
  15.         // TODO: add draw code for native data here
  16.         float x0 = 0,   y0 = 0;
  17.         float x1 = 300, y1 = 300;
  18.         int StartX,StartY,EndX,EndY;
  19.         DPtoVP(x0,y0,&StartX,&StartY);
  20.         DPtoVP(x1,y1,&EndX,&EndY);       
  21.         CPen pen(PS_SOLID,1,RGB(255,0,0));
  22.         CPen *pOldPen = pDC->SelectObject(&pen);
  23.         pDC->Ellipse(StartX,StartY,EndX,EndY);
  24.         pDC->SelectObject(pOldPen);}
复制代码
  1. 4.添加鼠标中键点击,放开,左键点击放开,鼠标移动,鼠标滑轮消息
  2. void CMy123View::OnLButtonDown(UINT nFlags, CPoint point)
  3. {
  4.         m_FirstPt = point;
  5.         CView::OnLButtonDown(nFlags, point);
  6. }
  7. void CMy123View::OnMouseMove(UINT nFlags, CPoint point)
  8. {
  9.         static CPoint OldPt = point;
  10.         CClientDC dc(this);

  11.         MoveScreen(point);//鼠标中键平移操作       
  12.         switch(m_ActionMode)
  13.         {
  14.         case ACTION_SCREEN_MOVE:
  15.                 break;
  16.         case ACTION_AREA_FILL://框选区域全屏显示
  17.                 if(nFlags&MK_LBUTTON) {               
  18.                         int OldMode = dc.SetROP2(R2_NOT);
  19.                         dc.SelectStockObject(NULL_BRUSH); //设置不填充状态                       
  20.                         dc.Rectangle(m_FirstPt.x,m_FirstPt.y,OldPt.x,OldPt.y);                       
  21.                         dc.Rectangle(m_FirstPt.x,m_FirstPt.y,point.x,point.y);                       
  22.                         dc.SetROP2(OldMode);       
  23.                 }
  24.                
复制代码
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:上位机VC MFC图形视窗缩放平移.rar 
文件大小:25.79 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  


回复

使用道具 举报

大神点评(1)

点击查看
快速回复 返回列表 客服中心 搜索