我编了个小程序 目的是实现点击“菜单1”时设置一个SetTimer()函数,点击“菜单2”时设置另一个SetTimer()函数,但应该如何在WM_TIMER 里控制当前应该调用哪个SetTimer()函数呢?在网上看到好像要用个Ontimer()函数,但这个函数好像不是sdk里的吧,所以也不知道怎么用!
解决方案 »
- 如何知道 哪个程序 正在使用数据库?
- 关于SQL SERVER 登录
- 怎样把MFC Dll工程 转换成MFC exe工程
- 请问谁能用通俗的文字语言说明一下Gabor小波变换的原理啊,谢谢!
- MFC开发的ActiveX控件遭遇奇怪的问题
- ×求一个简单的定时器例子
- VC如何直接执行windows内部指令
- 怎么设置Modem的属性?如何通过RAS来实现,拨号过程中添加自己的初始化AT命令?
- 在菜单资源的主菜单中增加顶层菜单项“测试控件”,是什么意思,
- 请教高人ado问题: 数据库表字段类型为text,如何insert
- 向高手请教:编译过程中出现的错误
- 基于MFC的DLL怎么实例化一个ActiveX控件
这个1就是定时器1,是用来区分不同的定时器的
然后响应OnTimer消息函数,通过这种方式控制不同的定时器
switch(nIDEvent)
{
case 1://处理定时器1
break;
case 2:
break;
default:
break;
}
最后KillTimer(1);//销毁定时器1
如果您需要在整个程序执行期间都使用定时器,那么您将得从WinMain函数中或者在处理WM_CREATE消息时呼叫SetTimer,并在退出WinMain或响应WM_DESTROY消息时呼叫KillTimer。根据呼叫SetTimer时使用的参数,可以下列三种方法之一使用定时器。方法一
这是最方便的一种方法,它让Windows把WM_TIMER消息发送到应用程序的正常窗口消息处理程序中,SetTimer呼叫如下所示:SetTimer (hwnd, 1, uiMsecInterval, NULL) ;
第一个参数是其窗口消息处理程序将接收WM_TIMER消息的窗口句柄。第二个参数是定时器ID,它是一个非0数值,在整个例子中假定为1。第三个参数是一个32位无正负号整数,以毫秒为单位指定一个时间间隔,一个60,000的值将使Windows每分钟发送一次WM_TIMER消息。您可以通过呼叫KillTimer (hwnd, 1) ;
在任何时刻停止WM_TIMER消息(即使正在处理WM_TIMER消息)。此函数的第二个参数是SetTimer呼叫中所用的同一个定时器ID。在终止程序之前,您应该响应WM_DESTROY消息停止任何活动的定时器。当您的窗口消息处理程序收到一个WM_TIMER消息时,wParam参数等于定时器的ID值(上述情形为1),lParam参数为0。如果需要设定多个定时器,那么对每个定时器都使用不同的定时器ID。wParam的值将随传递到窗口消息处理程序的WM_TIMER消息的不同而不同。为了使程序更具有可读性,您可以使用#define叙述定义不同的定时器ID:#define TIMER_SEC 1
#define TIMER_MIN 2
然后您可以使用两个SetTimer呼叫来设定两个定时器:SetTimer (hwnd, TIMER_SEC, 1000, NULL) ;
SetTimer (hwnd, TIMER_MIN, 60000, NULL) ;
WM_TIMER的处理如下所示:caseWM_TIMER:
switch (wParam)
{
case TIMER_SEC:
//每秒一次的处理
break ;
case TIMER_MIN:
//每分钟一次的处理
break ;
}
return 0 ;
如果您想将一个已经存在的定时器设定为不同的时间间隔,您可以简单地用不同的时间值再次呼叫SetTimer。在时钟程序里,如果显示秒或不显示秒是可以选择的,您就可以这样做,只需简单地将时间间隔在1000毫秒和60 000毫秒间切换就可以了。
{
if(nIDEvent==1){}
if(nIDEvent==2){}
}
if(nIDEvent==1){.....}
if(nIDEvent==2){.....}
编译提示我nIDEvent未申明?
直接用的wParam 但我还是不知道怎么用switch语句判断nIDEvent 因为编译器一直说没声明
能举个例子吗?谢谢!
我是在写sdk
所以你们说的那个classwizard我还不懂 呵呵...
还有一个问题想问下
定义一个HPEN holdpen 然后再调用MoveToEx 和LineTo函数画线
是不是画完一次线 hnewpen就注销了呢?
为什么我看到有的程序里画完一次线要再把holdpen的句柄再赋给hnewpen 然后再画下一次线?
-------------------------------------------------
那是为了演示不同画笔的效果!