VS2005程序画图的问题

liangchaoxi 2012-08-18 05:42:41
我想这样,用VS2005 建一个对话框,然后定义一个变量angle ,用定时器使其每秒+1,当>=360度时 angle=0,

然后在窗体上,画一个圆,然后画一个指针,指针根据angle的变化转动,请问怎么做?

最好能有详细的过程和代码。
...全文
188 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangchaoxi 2012-08-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
我记得我以前上传过一个,,网上很多哦
[/Quote]

不是画钟程序,是angle是根据传感器变化的,不是按时钟走的,然后应该是画图程序,就像指南针一样 使用onpaint 或者ondraw吧 ,但是我在对话框的 类视图中 有找不到view 这个类也就没有找到opaint 这个类了,我不知道怎么画
Xomic 2012-08-18
  • 打赏
  • 举报
回复
就是画钟面吧!

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);

}
大愚若智_ 2012-08-18
  • 打赏
  • 举报
回复
我记得我以前上传过一个,,网上很多哦
titer1 2012-08-18
  • 打赏
  • 举报
回复
来吧,看看这个
我觉得就是时钟功能

: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

64,701

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧