| 導購 | 订阅 | 在线投稿
分享
 
 
 

做表界面的程序

來源:互聯網網民  2007-02-02 20:13:16  評論

這是程序的界面

王朝网络

這個程序主要是爲了練習畫筆和畫刷的使用.

做這個小程序前先說個數學知識

題目:已知圓心坐標和半徑 一個圓上每隔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);

}

文章裏的代碼是該程序的主要代碼.

當然還有設置定時器,防止閃爍等.這些看下代碼就知道了

可能表示的方法不太好,但我想我已經把它的思想寫出來了.

我做這個程序主要是爲了練習畫筆和畫刷的使用.

點擊這裏下載代碼
http://p.blog.csdn.net/images/p_blog_csdn_net/dedodong/codeing.gif

注下載方法: 點右鍵,選擇目另存爲,下載後,把文件的後綴名GIF該爲RAR既可

 
特别声明:以上内容(如有图片或视频亦包括在内)为网络用户发布,本站仅提供信息存储服务。
 
這是程序的界面 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1170418381900.png[/img] 這個程序主要是爲了練習畫筆和畫刷的使用. 做這個小程序前先說個數學知識 題目:已知圓心坐標和半徑 一個圓上每隔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頭文件. 相信要是理解了上面那個數學知識 這個程序也就有個基礎的模型了 現在我們開始做了 分兩個步驟. 步驟一: 畫如圖片一所示的表盤 [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1170418382712.png[/img] 下面的是它的主要代碼: 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); } 文章裏的代碼是該程序的主要代碼. 當然還有設置定時器,防止閃爍等.這些看下代碼就知道了 可能表示的方法不太好,但我想我已經把它的思想寫出來了. 我做這個程序主要是爲了練習畫筆和畫刷的使用. 點擊這裏下載代碼 [url=http://p.blog.csdn.net/images/p_blog_csdn_net/dedodong/codeing.gif]http://p.blog.csdn.net/images/p_blog_csdn_net/dedodong/codeing.gif[/url] 注下載方法: 點右鍵,選擇目另存爲,下載後,把文件的後綴名GIF該爲RAR既可
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有