可视化编程MFC时钟.docx
- 文档编号:13365818
- 上传时间:2023-06-13
- 格式:DOCX
- 页数:29
- 大小:19.97KB
可视化编程MFC时钟.docx
《可视化编程MFC时钟.docx》由会员分享,可在线阅读,更多相关《可视化编程MFC时钟.docx(29页珍藏版)》请在冰点文库上搜索。
可视化编程MFC时钟
//clockDlg.cpp:
implementationfile
//
#include"stdafx.h"
#include"clock.h"
#include"clockDlg.h"
#include"math.h"
#include"mmsystem.h"
#include"windows.h"
#include"time.h"
#pragmacomment(lib,"winmm.lib")
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
//DELvoidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
//DEL{
//DELCDialog:
:
DoDataExchange(pDX);
//DEL//{{AFX_DATA_MAP(CAboutDlg)
//DEL//}}AFX_DATA_MAP
//DEL}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CClockDlgdialog
CClockDlg:
:
CClockDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CClockDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CClockDlg)
m_x=0;
m_y=0;
m_seth=0;
m_setm=0;
m_sets=0;
m_z=0;
sum=0,s=1,m=0,h=0;
inti,j;
//charch[15][3]={"12","1","2","3","4","5","6","7","8","9","10","11"};
for(i=0;i<15;i++)
for(j=0;j<3;j++)
ch[i][j]='\0';
ch[0][0]='1',ch[0][1]='2',ch[1][0]='1',ch[2][0]='2',ch[3][0]='3',ch[4][0]='4',ch[5][0]='5',ch[6][0]='6',ch[7][0]='7',
ch[8][0]='8',ch[9][0]='9',ch[10][0]='1',ch[10][1]='0',ch[11][0]='1',ch[11][1]='1';
o_x=175,o_y=175;
ss=false,sss=false;
memset(flag,false,sizeof(flag));
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCClockDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CClockDlg)
DDX_Text(pDX,IDC_EDIT1,m_x);
DDX_Text(pDX,IDC_EDIT2,m_y);
DDX_Text(pDX,IDC_EDIT5,m_seth);
DDX_Text(pDX,IDC_EDIT6,m_setm);
DDX_Text(pDX,IDC_EDIT7,m_sets);
DDX_Text(pDX,IDC_EDIT3,m_z);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CClockDlg,CDialog)
//{{AFX_MSG_MAP(CClockDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_Draw,OnDraw)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_Set,OnSet)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CClockDlgmessagehandlers
BOOLCClockDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
voidCClockDlg:
:
OnSysCommand(UINTnID,LPARAMlParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog:
:
OnSysCommand(nID,lParam);
}
}
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
voidCClockDlg:
:
OnPaint()
{
if(IsIconic())
{
CPaintDCdc(this);//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
}
else
{
CDialog:
:
OnPaint();
}
}
//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags
//theminimizedwindow.
HCURSORCClockDlg:
:
OnQueryDragIcon()
{
return(HCURSOR)m_hIcon;
}
/*voidCClockDlg:
:
OnMouseMove(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
m_x=point.x;
m_y=point.y+25;
UpdateData(false);
CDialog:
:
OnMouseMove(nFlags,point);
}*/
/******************************************************************************************/
constdoublePI=3.1415926;
voidCClockDlg:
:
OnDraw()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(!
ss)
{
CTimet=CTime:
:
GetCurrentTime();
seth=t.GetHour();
setm=t.GetMinute();
sets=t.GetSecond();
temp1=seth;
sum=(seth%12)*3600+60*setm+sets;
h=(seth%12)*5+setm/12;
m=setm;
s=sets;
}
sum=seth*3600+60*setm+sets;
m_x=temp1,m_y=setm,m_z=sets;
//m_x=m_x%12*5+m_y/12;
UpdateData(false);
CDC*pDC;
CPenNewpen,*Oldpen;
pDC=GetWindowDC();
Newpen.CreatePen(PS_SOLID,2,RGB(255,255,255));
Oldpen=pDC->SelectObject(&Newpen);
pDC->Ellipse(50,50,300,300);
Newpen.DeleteObject();
/*******************清除圆内********************/
Newpen.CreatePen(PS_SOLID,2,RGB(132,125,177));
pDC->SelectObject(&Newpen);
pDC->Ellipse(50,50,300,300);
Newpen.DeleteObject();
/********************圆*******************************/
Newpen.CreatePen(PS_SOLID,4,RGB(0,0,0));
pDC->SelectObject(&Newpen);
pDC->MoveTo(175,175);
pDC->LineTo(175,175);
/******************圆心*****************************/
pDC->SelectObject(&Newpen);
doubleconer=0.0;
intnum=15;
for(into=0;o<60;o++)
{
Newpen.DeleteObject();
Newpen.CreatePen(PS_SOLID,3,RGB(132,125,177));
pDC->SelectObject(&Newpen);
intuux,uuy;
uux=(int)(175+120*cos(coner));
uuy=(int)(175-120*sin(coner));
pDC->MoveTo(uux,uuy);
pDC->LineTo(uux,uuy);
//pDC->TextOut(uux,uuy,num);
x[num]=uux,y[num--]=uuy;
if((num+1)%5==0)
{
Newpen.DeleteObject();
Newpen.CreatePen(PS_SOLID,4,RGB(0,0,0));
pDC->SelectObject(&Newpen);
pDC->MoveTo(uux,uuy);
pDC->LineTo(uux,uuy);
}
if(num<0)
num=59;
coner+=PI/30.0;
}
/*******************获取60个点的坐标*****************************************/
Newpen.DeleteObject();
Newpen.CreatePen(PS_SOLID,4,RGB(0,0,0));
pDC->SelectObject(&Newpen);
pDC->TextOut(x[0]-6,y[0]+4,"12");
pDC->TextOut(x[5]-6,y[5]+4,"1");
pDC->TextOut(x[10]-11,y[10]-4,"2");
pDC->TextOut(x[15]-11,y[15]-6,"3");
pDC->TextOut(x[20]-11,y[20]-8,"4");
pDC->TextOut(x[25]-7,y[25]-17,"5");
pDC->TextOut(x[30]-3,y[30]-17,"6");
pDC->TextOut(x[35]+2,y[35]-17,"7");
pDC->TextOut(x[40]+4,y[40]-9,"8");
pDC->TextOut(x[45]+4,y[45]-8,"9");
pDC->TextOut(x[50]+4,y[50]-7,"10");
pDC->TextOut(x[55]+2,y[55]-1,"11");
/**********************12个数字**********************************************/
Newpen.DeleteObject();
Newpen.CreatePen(PS_SOLID,2,RGB(255,0,0));
pDC->SelectObject(&Newpen);
for(inti=0;i<60;i++)
{
if(i==0)
{
S_x[i]=175;
S_y[i]=75;
M_x[i]=175;
M_y[i]=95;
M_X[i]=175;
M_Y[i]=105;
H_x[i]=175;
H_y[i]=125;
H_X[i]=175;
H_Y[i]=135;
end_x[i]=175;
end_y[i]=185;
}
elseif(i==30)
{
S_x[i]=175;
S_y[i]=275;
M_x[i]=175;
M_y[i]=255;
M_X[i]=175;
M_Y[i]=245;
H_x[i]=175;
H_y[i]=225;
H_X[i]=175;
H_Y[i]=215;
end_x[i]=175;
end_y[i]=165;
}
elseif(i<30)
{
t=1.0*(10000*(x[i]*x[i]+30625-350*x[i]))/(y[i]*y[i]+30625-350*y[i]+x[i]*x[i]+30625-350*x[i]);
S_x[i]=sqrt(t)+175;
S_y[i]=(S_x[i]-175)*(y[i]-175)/(x[i]-175)+175;
/*************秒针终点坐标*****************/
t=1.0*(6400*(x[i]*x[i]+30625-350*x[i]))/(y[i]*y[i]+30625-350*y[i]+x[i]*x[i]+30625-350*x[i]);
M_x[i]=sqrt(t)+175;
M_y[i]=(M_x[i]-175)*(y[i]-175)/(x[i]-175)+175;
t=1.0*(4900*(x[i]*x[i]+30625-350*x[i]))/(y[i]*y[i]+30625-350*y[i]+x[i]*x[i]+30625-350*x[i]);
M_X[i]=sqrt(t)+175;
M_Y[i]=(M_X[i]-175)*(y[i]-175)/(x[i]-175)+175;
/************分针终点坐标*******************/
t=1.0*(2500*(x[i]*x[i]+30625-350*x[i]))/(y[i]*y[i]+30625-350*y[i]+x[i]*x[i]+30625-350*x[i]);
H_x[i]=sqrt(t)+175;
H_y[i]=(H_x[i]-175)*(y[i]-175)/(x[i]-175)+175;
t=1.0*(1600*(x[i]*x[i]+30625-350*x[i]))/(y[i]*y[i]+30625-350*y[i]+x[i]*x[i]+30625-350*x[i]);
H_X[i]=sqrt(t)+175;
H_Y[i]=(H_X[i]-175)*(y[i]-175)/(x[i]-175)+175;
/**************时针终点坐标*****************/
t=1.0*(100*(x[i]*x[i]+30625-350*x[i]))/(y[i]*y[i]+30625-350*y[i]+x[i]*x[i]+30625-350*x[i]);
end_x[i]=-1*sqrt(t)+175;
end_y[i]=(end_x[i]-175)*(y[i]-175)/(x[i]-175)+175;
/*************三针的尾部坐标*********************/
}
else
{
t=1.0*(10000*(x[i]*x[i]+30625-350*x[i]))/(y[i]*y[i]+30625-350*y[i]+x[i]*x[i]+30625-350*x[i]);
S_x[i]=-1*sqrt(t)+175;
S_y[i]=(S_x[i]-175)*(y[i]-175)/(x[i]-175)+175;
/*************秒针终点坐标*****************/
t=1.0*(6400*(x[i]*x[i]+30625-350*x[i]))/(y[i]*y[i]+30625-350*y[i]+x[i]*x[i]+30625-350*x[i]);
M_x[i]=-1*sqrt(t)+175;
M_y[i]=(M_x[i]-175)*(y[i]-175)/(x[i]-175)+175;
t=1.0*(4900*(x[i]*x[i]+30625-350*x[i]))/(y[i]*y[i]+30625-350*y[i]+x[i]*x[i]+30625-350*x[i]);
M_X[i]=-1*sqrt(t)+175;
M_Y[i]=(M_X[i]-175)*(y[i]-175)/(x[i]-175)+175;
/************分针终点坐标*******************/
t=1.0*(2500*(x[i]*x[i]+30625-350*x[i]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可视化 编程 MFC 时钟