| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4249 人关注过本帖, 1 人收藏
标题:[求助]用vc编写一个模拟时钟的程序
只看楼主 加入收藏
zyqd06
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-6-25
收藏(1)
 问题点数:0 回复次数:9 
[求助]用vc编写一个模拟时钟的程序

请各位帮忙,用VC画出表的形状,(这个是不是很难啊?反正我是一点也不懂,上面的图是我用 画图软件画的,很难看)
要求:
1.指针必须能动,而且成关系,(秒针1圈分针一个格,时针....)
2.当窗口变化是表盘依旧完整且成比例
3.(据老师要求,要在OnDraw中实现?)
4.谢谢!
5.电子邮箱:zyqd06@126.com
6.再次感谢!
搜索更多相关主题的帖子: 时钟 编写 模拟 
2007-06-25 15:25
little_stone
Rank: 1
等 级:新手上路
威 望:1
帖 子:163
专家分:0
注 册:2007-5-29
收藏
得分:0 
我做过一个这样的作业.很easy的.

2007-06-25 17:06
zyqd06
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-6-25
收藏
得分:0 
回复:(little_stone)我做过一个这样的作业.很easy的...
兄弟,给我发一个吧?
zyqd06@126.com
大恩不言谢。
2007-06-26 13:01
little_stone
Rank: 1
等 级:新手上路
威 望:1
帖 子:163
专家分:0
注 册:2007-5-29
收藏
得分:0 

真不好意思,我的程序太大了4M多,因为里面还有其它功能.

没办法了.巾段程序吧.

void CFill_areaView::myShowColok(CDC *pDC)
{

m_time=CTime::GetCurrentTime();

pDC->FillRect(&CRect(0,0,rect.Width(),rect.Height()),&CBrush(RGB(100,100,100)));
CBrush brush(RGB(150,150,150));
CBrush *oldbrush=pDC->SelectObject(&brush);
CPen pen(PS_SOLID,3,RGB(0,0,0));
CPen *oldpen=pDC->SelectObject(&pen);


pDC->Ellipse(&CRect(rect.Width()/2-(rect.Height()/2-10)/2,rect.Height()/2-(rect.Height()/2-10)/2,rect.Width()/2+(rect.Height()/2-10)/2,rect.Height()/2+(rect.Height()/2-10)/2));
pDC->Ellipse(&CRect(rect.Width()/2-3,rect.Height()/2-3,rect.Width()/2+3,rect.Height()/2+3));

CPen pen2(PS_SOLID,7,RGB(0,0,0));
pDC->SelectObject(&pen2);

pDC->MoveTo(rect.Width()/2,rect.Height()/2-16*(rect.Height()/2-10)/20);
pDC->LineTo(rect.Width()/2-15*(rect.Height()/2-10)/20,rect.Height()/2-6*(rect.Height()/2-10)/20);
pDC->LineTo(rect.Width()/2-15*(rect.Height()/2-10)/20,rect.Height()/2+12*(rect.Height()/2-10)/20);
pDC->LineTo(rect.Width()/2+15*(rect.Height()/2-10)/20,rect.Height()/2+12*(rect.Height()/2-10)/20);
pDC->LineTo(rect.Width()/2+15*(rect.Height()/2-10)/20,rect.Height()/2-6*(rect.Height()/2-10)/20);
pDC->LineTo(rect.Width()/2,rect.Height()/2-16*(rect.Height()/2-10)/20);

pDC->MoveTo(rect.Width()/2-15*(rect.Height()/2-10)/20+25,rect.Height()/2+12*(rect.Height()/2-10)/20);
pDC->LineTo(rect.Width()/2-15*(rect.Height()/2-10)/20+25,rect.Height()/2+12*(rect.Height()/2-10)/20+30);
pDC->LineTo(rect.Width()/2-15*(rect.Height()/2-10)/20+25+40,rect.Height()/2+12*(rect.Height()/2-10)/20+30);
pDC->LineTo(rect.Width()/2-15*(rect.Height()/2-10)/20+25+40,rect.Height()/2+12*(rect.Height()/2-10)/20);

pDC->MoveTo(rect.Width()/2+15*(rect.Height()/2-10)/20-25,rect.Height()/2+12*(rect.Height()/2-10)/20);
pDC->LineTo(rect.Width()/2+15*(rect.Height()/2-10)/20-25,rect.Height()/2+12*(rect.Height()/2-10)/20+30);
pDC->LineTo(rect.Width()/2+15*(rect.Height()/2-10)/20-25-40,rect.Height()/2+12*(rect.Height()/2-10)/20+30);
pDC->LineTo(rect.Width()/2+15*(rect.Height()/2-10)/20-25-40,rect.Height()/2+12*(rect.Height()/2-10)/20);

CPen pen1(PS_SOLID,1,RGB(0,0,0));
pDC->SelectObject(&pen1);
double alpha=0;
myPoint p1,p2,p3;
p1=m_pointColok[0],p2=m_pointColok[4],p3=m_pointColok[5];

for(int i=0;i<=60;i++)
{
alpha=i*6*pi/180;

p1.x=m_pointColok[0].x*cos(alpha)-m_pointColok[0].y*sin(alpha);
p1.y=m_pointColok[0].x*sin(alpha)+m_pointColok[0].y*cos(alpha);
pDC->MoveTo(ChangePoint(p1).x,ChangePoint(p1).y);

p2.x=m_pointColok[4].x*cos(alpha)-m_pointColok[4].y*sin(alpha);
p2.y=m_pointColok[4].x*sin(alpha)+m_pointColok[4].y*cos(alpha);

p3.x=m_pointColok[5].x*cos(alpha)-m_pointColok[5].y*sin(alpha);
p3.y=m_pointColok[5].x*sin(alpha)+m_pointColok[5].y*cos(alpha);


if(i%5==0)
pDC->LineTo(ChangePoint(p2).x,ChangePoint(p2).y);
else
pDC->LineTo(ChangePoint(p3).x,ChangePoint(p3).y);

pDC->SetBkMode(TRANSPARENT);

CFont font;
font.CreateFont(16,12,0,0,FW_NORMAL,FALSE,FALSE,FALSE,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,"Arial");
CFont *oldfont=pDC->SelectObject(&font); //改变字体

pDC->SetTextColor(RGB(255,205,100));
pDC->TextOut(rect.Width()/2-0.9*(rect.Height()/2-10)/2,rect.Height()/2-5,"9");
pDC->TextOut(rect.Width()/2+0.9*(rect.Height()/2-30)/2,rect.Height()/2-5,"3");
pDC->TextOut(rect.Width()/2-10,rect.Height()/2-0.9*(rect.Height()/2-10)/2,"12");
pDC->TextOut(rect.Width()/2-10,rect.Height()/2+0.9*(rect.Height()/2-10)/2-10,"6");

CFont font1;
font1.CreateFont(10,8,0,0,FW_NORMAL,FALSE,FALSE,FALSE,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,"Arial");
pDC->SelectObject(&font1); //改变字体
pDC->SetBkColor(RGB(255,0,0));
pDC->TextOut(rect.Width()/2-0.2*(rect.Height()/2-10)/2,rect.Height()/2+0.2*(rect.Height()/2-10)/2,"REDOR1");
pDC->TextOut(rect.Width()/2-0.1*(rect.Height()/2-10)/2,rect.Height()/2-0.7*(rect.Height()/2-10)/2,"DOC");

pDC->SelectObject(oldfont);

}////////////////////画表盘

////////////指针

p1.x=m_pointColok[1].x*cos(jiao1)-m_pointColok[1].y*sin(jiao1);
p1.y=m_pointColok[1].x*sin(jiao1)+m_pointColok[1].y*cos(jiao1);

p2.x=m_pointColok[2].x*cos(jiao2)-m_pointColok[2].y*sin(jiao2);
p2.y=m_pointColok[2].x*sin(jiao2)+m_pointColok[2].y*cos(jiao2);

p3.x=m_pointColok[3].x*cos(jiao3)-m_pointColok[3].y*sin(jiao3);
p3.y=m_pointColok[3].x*sin(jiao3)+m_pointColok[3].y*cos(jiao3);

myBiaoZhen(pDC,p1, RGB(255,0,0),1);
myBiaoZhen(pDC,p2,RGB(255,255,0),1);
myBiaoZhen(pDC,p3,RGB(0,0,255),1);

pDC->SelectObject(oldbrush);
pDC->SelectObject(oldpen);


CFont font1;

font1.CreateFont(24,20,0,0,FW_NORMAL,FALSE,FALSE,FALSE,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,"Arial");
CFont *oldfont1=pDC->SelectObject(&font1); //改变字体

pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(200,0,0));

pDC->TextOut(50,30,"时钟模拟:");

CString str1=m_time.Format("%H:%M:%S ");

pDC->TextOut(rect.Width()-200,20,str1);
pDC->SelectObject(oldfont1);
}

void CFill_areaView::InitColok()
{
m_pointColok[0].x=0;
m_pointColok[0].y=10;
m_pointColok[1].x=0;
m_pointColok[1].y=8.7;
m_pointColok[2].x=0;
m_pointColok[2].y=6;
m_pointColok[3].x=0;
m_pointColok[3].y=5;
m_pointColok[4].x=0;
m_pointColok[4].y=9;
m_pointColok[5].x=0;
m_pointColok[5].y=9.5;

}
void CFill_areaView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(nIDEvent==1){
jiao1 =-(double)m_time.GetHour()*60*60*6*pi/180-(double)m_time.GetMinute()*60*6*pi/180-(double)m_time.GetSecond()*6*pi/180-6*pi/180;
jiao2=(-(double)m_time.GetMinute()-(double)m_time.GetSecond()/60)*6*pi/180;
sndPlaySound ("c:\sound\music.wav",SND_ASYNC);
jiao3=-((double)m_time.GetHour()+(double)m_time.GetMinute()/60+(double)m_time.GetSecond()/3600)*30*pi/180;
InvalidateRect(&CRect(rect.Width()/2-0.85*(rect.Height()/2-10)/2,rect.Height()/2-0.85*(rect.Height()/2-10)/2,rect.Width()/2+0.85*(rect.Height()/2-10)/2,rect.Height()/2+0.85*(rect.Height()/2-10)/2),TRUE);
InvalidateRect(&CRect(rect.Width()-250,10,rect.Width(),60),TRUE);
}
if(nIDEvent==2){
ds--;
InvalidateRect(&CRect(rect.Width()/2-250,ds-2,rect.Width()/2+250,ds+2),TRUE);
}
CView::OnTimer(nIDEvent);
}

void CFill_areaView::myBiaoZhen(CDC *pDC, myPoint point, COLORREF color, int i)
{
CPen pen(PS_SOLID,i,color);
CPen *oldpen=pDC->SelectObject(&pen);
pDC->MoveTo(rect.Width()/2,rect.Height()/2);
pDC->LineTo(ChangePoint(point).x,ChangePoint(point).y);
pDC->SelectObject(oldpen);
}
大体就用到上面三个函数.用到的变量你看着加吧.
呵呵.附件是效果.

JkOgdfxL.rar (28.33 KB) [求助]用vc编写一个模拟时钟的程序



2007-06-26 18:58
zyqd06
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-6-25
收藏
得分:0 

楼上的 兄弟果然 是厉害,不愧是北航的!
无论如何,多谢了!

2007-06-27 18:27
sea_sky
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-7-6
收藏
得分:0 

果真

2007-07-06 09:13
qingqing4883
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-7-6
收藏
得分:0 
回复:(little_stone)真不好意思,我的程序太大了4M多...
你好,看的出你是个VC专家,我现在急需用VC设计一个矢量表控件,一点思路也没有,具体问题是这样的:
模拟矢量表显示,Top,Left,Width,Height属性,光点Gx,Gy属性,光点大小,颜色属性,具有两个TEXTBOX文本框显示角度和克数,Textcolor,Textnr属性,具有自动mg、g、kg单位显示功能。0-5mg,5-25mg,等12挡显示功能,并具有量程最大显示框.
我的问题是怎么在控件中显示光点和整个坐标系,如何设计控件呢,我熟悉的是对话框的设计,对控件一无所知.我在网上看到ATL还有ActiveX,不知怎么设计
拜托帮帮忙.

QQ 252796085 EMail qingqing4883@163.com TEL 13515417025
2007-07-06 10:23
visualsan
Rank: 2
等 级:论坛游民
威 望:1
帖 子:13
专家分:49
注 册:2009-8-28
收藏
得分:0 
渐变颜色时钟
看看这个这么样
渐变颜色时钟.rar (114.33 KB)
2009-10-18 19:08
elitezhu
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-8-21
收藏
得分:0 
回复 7楼 qingqing4883
你这个很好  我正好要用到  谢谢了哇!
2010-08-21 10:39
快速回复:[求助]用vc编写一个模拟时钟的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023510 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved