科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件做表界面的程序

做表界面的程序

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

这个程序主要是为了练习画笔和画刷的使用. 做这个小程序前先说个数学知识 题目:已知圆心坐标和半径 一个圆上每隔6度取一个点. 解法如下:圆心坐标是(x,y),半径为R. double PI=3.1415926 角度为i的点坐标 x1=x+R*cos(i*6.0/180*PI); y1=y+R*sin(i*6.0/180*PI); 注意 使用cos和sin函数要包含math.h头文件.

作者:冬瓜 来源:CSDN 2008年3月22日

关键字: 程序 表界面 C++ C Linux

  • 评论
  • 分享微博
  • 分享邮件

这是程序的界面

这个程序主要是为了练习画笔和画刷的使用.
做这个小程序前先说个数学知识

题目:已知圆心坐标和半径 一个圆上每隔6度取一个点.
解法如下:
圆心坐标是(x,y),半径为R.
double PI=3.1415926
角度为i的点坐标
x1=x+R*cos(i*6.0/180*PI);
y1=y+R*sin(i*6.0/180*PI);
注意 使用cos和sin函数要包含math.h头文件.
相信要是理解了上面那个数学知识 这个程序也就有个基础的模型了

现在我们开始做了 分两个步骤.
步骤一:    
画如图片一所示的表盘

下面的是它的主要代码:

CDC  *memdc=GetDC();
 //*********画圆
 CPen pen1(PS_SOLID,5,RGB(0,0,0));
 CPen *pOldPen=memdc->SelectObject(&pen1);
 memdc->Ellipse(25,25,225,225);
 memdc->SelectObject(pOldPen);
//*********画圆

//**********画表的中点
 CBrush brush(RGB(0,0,255));
 CBrush *pOldbrush=memdc->SelectObject(&brush);
 memdc->Ellipse(130,130,120,120);
 memdc->SelectObject(pOldbrush);
  //*********画表的中点


 int x1[60], y1[60], x2[60], y2[60];
 int x0=125, y0=125;
 int r = 100;
 double PI=3.1415926;
 int h=3; //画出数字的基数
 for(int i=0; i<60; i++)
 {
  x1[i] =int( x0 + r*cos(i*6.0/180*PI));
  y1[i] =int( y0 + r*sin(i*6.0/180*PI));

 if (i%5 == 0)
 {
  x2[i] =int( x0 + (r-10)*cos(i*6.0/180*PI));
  y2[i] = int(y0 + (r-10)*sin(i*6.0/180*PI));

  //************ 画出数字*****
      if(h>12)
   h=1;
         CString str;
         str.Format("%d",h);
   memdc.TextOut(x2[i],y2[i],str);
         h++;
 //************ 画出数字*****

  CPen pen2(PS_SOLID,4,RGB(0,255,0));
  CPen *pOldPen2=memdc->SelectObject(&pen2);
  CPoint p1(x1[i],y1[i]),p2(x2[i],y2[i]);

//*****画刻度
  memdc->MoveTo(p1);
  memdc->LineTo(p2);
  memdc->SelectObject(pOldPen2);
//*****画刻度

 }

步骤2.
画时针,分针和秒针.
我分别用三个函数来画.
这是画时针的函数
//****************画时针********
void  DrawHour(CDC* pDC)
{
 int x0=125, y0=125; //圆点坐标
int r = 100;                 //圆半径
double PI=3.1415926;

// DrawHour函数是一个类中的成员函数.hour和minute是该类里的数据成员
//hour表示当前时间的小时数值,minute表示分钟的数值

int h=hour*5+45+(int)((double)minute/60*5);
//这里判断时针的确切位置 加上(int)((double)minute/60*5)

  int   x =int( x0 + r*cos(h*6.0/180*PI));
 int   y =int( y0 + r*sin(h*6.0/180*PI));

   CPen pen2(PS_SOLID,10,RGB(0,255,0));
 CPen *pOldPen2=pDC->SelectObject(&pen2);
    CPoint p1(x0,y0),p2(x,y);

 pDC->MoveTo(p1);
 pDC->LineTo(p2);
   pDC->SelectObject(pOldPen2);
}

画分针函数和秒针的差不多,我就写出一个.
void DrawMinute(CDC* pDC)
{
  int x0=125, y0=125;
 int r = 100;
 double PI=3.1415926;

// DrawMinute函数是一个类中的成员函数.minute是该类里的数据成员
//minute表示分钟的数值

int h=minute+45;

 int   x =int( x0 + r*cos(h*6.0/180*PI));
 int   y =int( y0 + r*sin(h*6.0/180*PI));

   CPen pen2(PS_SOLID,8,RGB(255,0,0));
  CPen *pOldPen2=pDC->SelectObject(&pen2);
   CPoint p1(x0,y0),p2(x,y);

 pDC->MoveTo(p1);
 pDC->LineTo(p2);
   pDC->SelectObject(pOldPen2);

}

文章里的代码是该程序的主要代码.
当然还有设置定时器,防止闪烁等.这些看下代码就知道了
可能表示的方法不太好,但我想我已经把它的思想写出来了.
我做这个程序主要是为了练习画笔和画刷的使用.

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章