VS2005程序画图的问题
我想这样,用VS2005 建一个对话框,然后定义一个变量angle ,用定时器使其每秒+1,当>=360度时 angle=0,
然后在窗体上,画一个圆,然后画一个指针,指针根据angle的变化转动,请问怎么做?
最好能有详细的过程和代码。
[解决办法]
来吧,看看这个
我觉得就是时钟功能
:MFC绘制表盘的源程序,可以自己修改参数,非常漂亮实用-Dial mapping MFC source, you can modify parameters of their own, very beautiful and practical
http://www.pudn.com/downloads111/sourcecode/windows/dialog/detail460359.html
VC++ 圆形动态时钟程序源码
http://www.newxing.com/Code/VC/TXCL/1077.html
[解决办法]
就是画钟面吧!
void CAlarm::OnTimer(UINT_PTR nIDEvent){ // TODO: Add your message handler code here and/or call default UpdateData(TRUE); Ctime = CTime::GetCurrentTime(); CClientDC dc(this); CDC cdc; int rr = 150; const double PI = 4.0 * atan( 1.0 ); const double AG = 180.0 / PI; switch(/*ALARMSOUND == */nIDEvent) { case SETALARM: m_curtimeValue = Ctime.Format("%H : %M : %S"); UpdateData(false); bm.GetBitmap(&BT); cdc.CreateCompatibleDC(&dc); cdc.SelectObject(&bm); dc.BitBlt(110,20,BT.bmWidth+110,BT.bmHeight+20,&cdc,0,0,SRCCOPY); cdc.DeleteDC(); POINT mid; mid.x = 310; mid.y = 300; POINT p1, p2, p3; SYSTEMTIME st; GetLocalTime(&st); double h, m, s; s = st.wSecond; m = st.wMinute + s/60; h = st.wHour + m/60; p1.x = LONG(0.8*rr*cos((s*6-90)/AG) + mid.x); p1.y = LONG(0.8*rr*sin((s*6-90)/AG) + mid.y); dc.MoveTo(p1.x, p1.y); dc.LineTo(mid.x, mid.y); dc.SelectObject(&greenPen); p1.x = LONG(0.8*rr*cos((m*6-90)/AG) + mid.x); p1.y = LONG(0.8*rr*sin((m*6-90)/AG) + mid.y); p3.x = LONG(-0.1*rr*cos((m*6-90)/AG) + mid.x); p3.y = LONG(-0.1*rr*sin((m*6-90)/AG) + mid.y); p2.x = LONG(0.1*rr*cos((m*6-75)/AG) + mid.x); p2.y = LONG(0.1*rr*sin((m*6-75)/AG) + mid.y); //m_memDC.BeginPath(); dc.MoveTo(p3.x, p3.y); //m_memDC.LineTo(p2.x, p2.y); dc.LineTo(p1.x, p1.y); p2.x = LONG(0.1*rr*cos((m*6-105)/AG) + mid.x); p2.y = LONG(0.1*rr*sin((m*6-105)/AG) + mid.y); dc.MoveTo(p3.x, p3.y); //m_memDC.LineTo(p2.x, p2.y); dc.LineTo(p1.x, p1.y); // m_memDC.EndPath(); // rgn1.CreateFromPath(&m_memDC); dc.SelectObject(&bluePen); p1.x = LONG(0.7*rr*cos((h*30-90)/AG) + mid.x); p1.y = LONG(0.7*rr*sin((h*30-90)/AG) + mid.y); p3.x = LONG(-0.1*rr*cos((h*30-90)/AG) + mid.x); p3.y = LONG(-0.1*rr*sin((h*30-90)/AG) + mid.y); p2.x = LONG(0.1*rr*cos((h*30-60)/AG) + mid.x); p2.y = LONG(0.1*rr*sin((h*30-60)/AG) + mid.y); // m_memDC.BeginPath(); dc.MoveTo(p3.x, p3.y); //m_memDC.LineTo(p2.x, p2.y); dc.LineTo(p1.x, p1.y); p2.x = LONG(0.1*rr*cos((h*30-120)/AG) + mid.x); p2.y = LONG(0.1*rr*sin((h*30-120)/AG) + mid.y); dc.MoveTo(p3.x, p3.y); //m_memDC.LineTo(p2.x, p2.y); dc.LineTo(p1.x, p1.y); // m_memDC.EndPath(); break; CDialog::OnTimer(nIDEvent);}