求助:在DLL中申请TIMER的问题!!!

liuzewei 2006-11-11 03:12:15
请教个问题,我将程序中一个类分离出来,单独放到了一个DLL中,这个DLL需要一个TIMER,我这样申请:
main_timer = SetTimer(hwnd_app,1,3000,0);
//hwnd_app是EXE主程序传给DLL的m_hWnd
然后我在DLL里建立了一个消息钩子,挂在自己的EXE主程序上,在消息钩子处理函数里这样:
if(n_code >= 0)
{
LPMSG message = (LPMSG)l_param;
switch(message->message)
{
case WM_TIMER:
AfxMessageBox("main_timer");
}

运行的结果是:瞬间弹出无数个窗口,请问下,正确的做法是怎样的呢,哪位大虾指点下。
...全文
118 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuzewei 2006-11-11
  • 打赏
  • 举报
回复
找到问题来源了。。。任何定时器触发时,WINDOWS会向所有窗口发送WM_TIMER消息。所以要这样:
case WM_TIMER:
if(message_app->hwnd == hwnd_app)
::AfxMessageBox("ok");
break;

谢谢上面的朋友了,晚上回来给分,下午要考试。
liuzewei 2006-11-11
  • 打赏
  • 举报
回复
不是啊,我要HOOK鼠标移动消息啊。如果不行,那我就要分离出一个TIMERPROC,这样有两个回调函数了。不统一不好看啊!
DentistryDoctor 2006-11-11
  • 打赏
  • 举报
回复
消息钩子的问题,与Timer无关。为什么用AfxMessageBox?
在AfxMessageBox刚结束时,下次定时器消息已经触发?
jacklzw88 2006-11-11
  • 打赏
  • 举报
回复
你没必要消息钩子,你做个回调函数就行!!
::SetTimer(hwnd_app,1,3000, (TIMERPROC)_TimerProc);
void CALLBACK _TimerProc(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
::KillTimer(hWnd, idEvent);
//Show your dialog blow
}

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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