OnTimer(UINT nIDEvent) 与SetTimer(1 ,2000, NULL)

jkjfds 2008-06-30 02:46:58


我在view中定义了 函数void CNetworkView::DrawDoc(mdraw *mdr)
然后定义了

void CNetworkView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case 1:
view->DrawDoc(mdr);
//你对1号的操作;
break;
case 2:
s2->Send(CurTime);
//对2号的操作;
break;
default:
break;
}
CView::OnTimer(nIDEvent);
}
再在
void CNetworkView::OnDraw(CDC* pDC)
{
CNetworkDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
view->SetTimer(1, 1000, NULL);
view->SetTimer(2 ,2000, NULL);
}


但是程序不总是更新,就是好像没有执行一样

...全文
318 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhp7185 2010-08-19
  • 打赏
  • 举报
回复
学习了啊!
菜牛 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 liyinlei 的回复:]
既然DrawDoc等这些函数都是在CNetworkView里,那就在switch里直接调用DrawDoc就可以了。类里面的函数里可以随意调用成员函数的啊

在CNetworkView里又去定义一个CNetworkView的对象view干嘛?

我看楼主连类,成员函数这些基本功方面都还没搞清
[/Quote]
同意
cnzdgs 2008-06-30
  • 打赏
  • 举报
回复
在类的内部,this就是当前对象指针(可以省略),无须把类指针另外保存。
liyinlei 2008-06-30
  • 打赏
  • 举报
回复
既然DrawDoc等这些函数都是在CNetworkView里,那就在switch里直接调用DrawDoc就可以了。类里面的函数里可以随意调用成员函数的啊

在CNetworkView里又去定义一个CNetworkView的对象view干嘛?

我看楼主连类,成员函数这些基本功方面都还没搞清
jkjfds 2008-06-30
  • 打赏
  • 举报
回复
就这样
jkjfds 2008-06-30
  • 打赏
  • 举报
回复
我定义了一个CNetworkView的对象view
而DrawDoc(mdr);是CNetworkView的成员函数
所以要调用它更定要加view
我现在把
SetTimer(1, 1000, NULL);
SetTimer(2 ,2000, NULL);

和初始化全部加到了CNetworkView::OnInitUpdate函数中
好像可以了
cnzdgs 2008-06-30
  • 打赏
  • 举报
回复
view->DrawDoc(mdr);
这个view是什么?DrawDoc中是怎么写的?
jkjfds 2008-06-30
  • 打赏
  • 举报
回复
运行一次之后就死了,运行不了
jkjfds 2008-06-30
  • 打赏
  • 举报
回复
我按你说的

SetTimer(1, 1000, NULL);
SetTimer(2 ,2000, NULL);
放到CNetworkView::OnInitUpdate中
把CNetworkView::OnDraw中的SetTimer删除,
运行,只执行了一次就完了,
没有动画的感觉
yxz_lp 2008-06-30
  • 打赏
  • 举报
回复
先不说每隔1秒重画视合不合理,也不知道view->SetTimer(1, 1000, NULL);前面view是什么,但有一个原则,那个窗口
设置SetTimer,就由哪个窗口接收OnTimer,综以上,应该是在CNetworkView的OnCreate里调用SetTimer(1, 1000, NULL);前面的view不要,
switch(nIDEvent)
{
case 1:
view->DrawDoc(mdr);//view->为什么加??


cnzdgs 2008-06-30
  • 打赏
  • 举报
回复
实际情况呢?是从未调用过DrawDoc吗?
如果你在程序运行过程中没有KillTimer,建议在CNetworkView::OnInitUpdate函数中
SetTimer(1, 1000, NULL);
SetTimer(2 ,2000, NULL);
把CNetworkView::OnDraw中的SetTimer去掉。
jkjfds 2008-06-30
  • 打赏
  • 举报
回复

我的目的就是隔一段时间调用一次
void CNetworkView::DrawDoc(mdraw *mdr)

cnzdgs 2008-06-30
  • 打赏
  • 举报
回复
没明白具体是什么问题,SetTimer的目的是什么?
另外,SetTimer只要在初始化的时候调用一次就够了,OnDraw函数会执行很多次。
liyinlei 2008-06-30
  • 打赏
  • 举报
回复
Ondraw 是会被不断调用的,怎么能在这里 进行SetTimer创建定时器呢

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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