《windows程序设计》在讲SetTimer方法三 ,时有些地方看不懂,哪位高手帮我分析一下:iTimerID = SetTimer (NULL, 0, wMsecInterval, TimerProc) ;
KillTimer (NULL, iTimerID) ;
传递给TimerProc计时器函式的hwnd参数也必须是NULL怎么传递给TimerProc计时器函数hwnd也是NULL,万一TimerProc里面有GetDC,方法三就出现:
hdc=GetDC(NULL);不就是获得整个屏幕的HDC了?这不就有错了

解决方案 »

  1.   

    1.楼主需要明白的一点是定时器的运行可以不依赖于窗体而存在。只要有消息循环,就可以接受到WM_TIMER消息。WM_TIMER的生成实际上是软件中断结果,它不管消息循环模型如何建立,哪怕主窗体被对话框阻塞掉,程序仍然能接受到这个消息。怎么传递给TimerProc计时器函数hwnd也是NULL
    ------------------------------------------------------
    因为SetTimer函数中没有指定窗体句柄,所以系统就认为定时器不依赖于窗体,就自动创建一个定时器,并把定时器标识符返还给用户。万一TimerProc里面有GetDC,方法三就出现: 
    hdc=GetDC(NULL); 
    --------------------------------------------------------
    第三种方法不同于第二种,具体情况具体分析。方法三实现上适用于控制台的程序,而不是GUI的程序。