首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

VS2005程序画图的有关问题

2012-09-05 
VS2005程序画图的问题我想这样,用VS2005 建一个对话框,然后定义一个变量angle ,用定时器使其每秒+1,当36

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
[解决办法]
就是画钟面吧!

C/C++ code
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);} 

热点排行