关于计时器位置的!!!

yiruirui0507 2010-03-26 11:48:34
int CMFCView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: 在此添加您专用的创建代码
/* CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
ShowCaret();*/
SetTimer(1,100,NULL);
return 0;
}
定义了一个SDI,我想问大家SetTimer(1,100,NULL);这个函数需要放在什么位置吗?
void CMFCView::OnDraw(CDC* /*pDC*/)
{
CMFCDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
/* CString str("hello world!");
CDC *pDC=GetDC();
pDC->TextOut(50,50,str);
CSize sz=pDC->GetTextExtent(str);
str.LoadString(IDS_STRING101);
pDC->TextOut(300,300,str);
pDC->BeginPath();
pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);
pDC->EndPath();
pDC->SelectClipPath(RGN_XOR);
//CString str1;
//str1.LoadString(IDS_STRING101);
//pDC->TextOut(100,100,str1);
for(int i=0;i<=300;i+=10)
{
pDC->MoveTo(0,i);
pDC->LineTo(300,i);
pDC->MoveTo(i,0);
pDC->LineTo(i,300);
}
ReleaseDC(pDC);
*/
// TODO: 在此处为本机数据添加绘制代码
SetTimer(1,100,NULL);
}
上面两个函数,我随便放在任意一个函数中,都能实现我的功能,请问SetTimer(1,100,NULL);
是不是放在CMFCView中任意位置都可以啊?还是有什么讲究呢?
...全文
92 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kier2 2010-03-26
  • 打赏
  • 举报
回复
最好不要放在ondraw里面,你想啊,每次重绘的时候都设置一次定时器啊!这样不好吧!最好在OnCreate里面,只设置一次定时器就好了
BinboWang1987 2010-03-26
  • 打赏
  • 举报
回复
原则上是这样的,你调用一次之后,要调用killtimer将定时器关闭
maple_zhj 2010-03-26
  • 打赏
  • 举报
回复
来晚了,

放哪也不能放 在 绘制UI的函数里啊。
dzy198239 2010-03-26
  • 打赏
  • 举报
回复
CMFCView::OnCreate重载了CWnd::OnCreate函数
以上的英文翻译成汉语为:当应用程序要求调用Create或CreateEx来创建Windows的窗口时框架会调用OnCreate函数。


CView::OnDraw()
每次重绘视图时都会调用OnDraw()函数,例如把最小化的窗口重新显示,被部分遮挡的窗口完全显示都会调用OnDraw()函数来重绘视图,因此如果你把SetTimer()函数放进OnDraw()函数体中可能会重复执行SetTimer()函数,从而造成错误。
框架调用CView::OnDraw()来进行屏幕显示,打印和打印预览,以上三种情况下所传递的设备是不同的。程序没有默认的执行方式(可能必须在三种情况下选一种)。

你必须重载该函数来显示你的视图。你可以用指向CDC对象的pDC参数来调用图形设备接口。在绘制视图前你可以把图形设备接口资源,例如画笔或字体,选入设备,绘图完成之后你可以取消你先前的选择。通常情况下你的绘图代码是设备无关的;即不需要知道用来显示图像的设备是什么类型的。

为了优化绘图,调用设备的RectVisible成员函数来寻找是否要绘制一个给定的矩形。如果你需要区分正常的屏幕显示和打印,调用设备上下文的IsPrinting成员函数。
SullenSun 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]

放在OnCreate函数中即可,不要放在OnDraw()中,SetTimer了以后,不再使用计时器的时候,KillTimer掉
[/Quote]
结贴。。
小生我怕怕 2010-03-26
  • 打赏
  • 举报
回复
可以结贴了 ~~
放在OnCreate函数中!
Eleven 2010-03-26
  • 打赏
  • 举报
回复
放在OnCreate函数中即可,不要放在OnDraw()中,SetTimer了以后,不再使用计时器的时候,KillTimer掉

16,472

社区成员

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

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

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