注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

沙粒的博客

 
 
 

日志

 
 

ActiveX: 仪表控件  

2015-01-12 17:15:09|  分类: ActiveX |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一、功能

1、绘制指针控件,用仪表指针指示输入数据

二、仪表属性

1、仪表量程range

2、数据indata

三、程序步骤

1、用MFC ActiveX ControlWizard 向导创建控件clock,向导各步骤都选择默认值

2、添加属性range表示仪表量程,选项为implementation: member variable; type:short;

3、添加属性indata表示控件输入数据,选项为implementation : member variable;  type:short;

4、为CClockCtrl添加变量BOOL m_bfirst,标志绘制第一个指针;

5、为CClockCtrl添加变量CPoint m_point,表示指针坐标

6OnDraw函数代码

void CClockCtrl::OnDraw(

        CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)

{

  //获取客户区范围

  CRect rect;

  GetClientRect(&rect);

 

  //计算仪表盘中心坐标

  int cx=rect.right/2;

  int cy=rect.bottom/2;

 

  //绘制刻度的半径

  int radius1=0.45*rect.bottom;

 

  //对应角度

  double pi=3.1415926;

  //单位量程对应的度数

  double degree=2*pi/m_range;

  //绘制刻度的半径

  int radius;

 

  //画刻度

  for(int i=0;i<m_range;i++)

  {

     //计算刻度的坐标

     int scaleX=cx+radius1*sin(i*degree);

     int scaleY=cy-radius1*cos(i*degree);

 

     //绘制刻度

     //5的倍数时,画大刻度,否则画小刻度

     if(i%5==0)

     {

        radius=5;

        pdc->Ellipse(scaleX-radius,scaleY-radius,scaleX+radius,scaleY+radius);

     }

     else

     {

        radius=3;

        pdc->Ellipse(scaleX-radius,scaleY-radius,scaleX+radius,scaleY+radius);

 

     }

  }

 

  //--绘制指针

//选择绘图模式,重复绘2此指针消失

  pdc->SetROP2(R2_NOTXORPEN );

  //设笔

  CPen pen(PS_SOLID,5,RGB(200,0,0));

  //选择红色的笔

  CPen* poldpen=pdc->SelectObject(&pen);

 

  //计算指针坐标

  radius=0.85*0.45*rect.bottom;

  int px=cx+radius*sin(m_indata*degree);

  int py=cy-radius*cos(m_indata*degree);

 

  //绘新指针,涂旧指针

  if(m_bfirst==false)

  {

     //画指针

     pdc->MoveTo(cx,cy);

     pdc->LineTo(px,py);

 

//修改标志

     m_bfirst=true;

//保存坐标

     m_point.x=px;

     m_point.y=py;

  }

  else

  {

     //删除原指针

     pdc->MoveTo(cx,cy);

     pdc->LineTo(m_point);

    

     //画新指针

     pdc->MoveTo(cx,cy);

     pdc->LineTo(px,py);

 

     //保存指针坐标

     m_point.x=px;

     m_point.y=py;

  }

 

 

  //--绘制中心点  

  //点的大小

  radius=6;

  //绘制矩形

pdc->Ellipse(cx-radius,cy-radius,cx+radius,cy+radius);

 

  //释放笔,选择系统笔

  pdc->SelectObject(poldpen);

}

 

7OnRangeChanged函数代码:

void CClockCtrl::OnRangeChanged()

{

  // TODO: Add notification handler code

  InvalidateControl();

 

  SetModifiedFlag();

}

 

8OnIndataChanged函数代码:

void CClockCtrl::OnIndataChanged()

{

  // TODO: Add notification handler code

  InvalidateControl();

 

  SetModifiedFlag();

}

 

 

 

 

 

 

  评论这张
 
阅读(367)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017