我在我的APP类里
afx_msg LRESULT OnTimeHandle(WPARAM wParam, LPARAM lParam);
在cpp里定义了
#define TimeHandleWindowMessage WM_USER+200ON_MESSAGE(TimeHandleWindowMessage, OnTimeHandle)LRESULT CTestModuleApp::OnTimeHandle(WPARAM wParam, LPARAM lParam)
{
CUdpTestComm* m_UdpTestComm = (CUdpTestComm*)lParam;
if(m_UdpTestComm)
m_UdpTestComm->HandleTimeout();  return 0;}我想触发该消息:
theApp.PostThreadMessage(TimeHandleWindowMessage, 0, (DWORD)this);
为什么,不进入那个消息处理函数中?

解决方案 »

  1.   

    其实我只是想做一个类似于定时器的东西,在COM里有没有什么更简单的方法实现?
      

  2.   

    void CUdpTestComm::HandleTimeout()
    {
    DWORD curTick = GetTickCount();//得到当前系统时间
    if(m_SendMsgTimer ==0xFFFFFFFFL)
    return ; //如果当前时间小于没有到延时的5秒,那么继续发送TimeHandleWindowMessage消息
    //如果当前系统时间,超过5秒,那么执行下一次发送
    if(curTick < m_SendMsgTimer)
    {
    Sleep(10);
    //继续发送消息
    theApp.PostThreadMessage(TimeHandleWindowMessage, 0, (DWORD)this);
    }
    else
    NextSend();//执行下一次发送任务
    }
      

  3.   

    呃……你是在人家的地头上,所以人家的消息循环不把消息传递给你自己处理了也有可能,WM_USER+200不是固定给你用的。确保你可以收到消息的方法是用Hook和RegisterMessage
      

  4.   

    消息机制是在窗口之上建立的,app只响应集中特殊的消息,也忘了那些了,一般我的处理方法是建立一个dlg,然后在里面响应消息(保证能使)
    方法二,想建立一个ontimer,你也可以利用事件处理。
      

  5.   

    如果用消息映射的话,PostThreadMessage()对应的消息映射宏为
    ON_THREAD_MESSAGE而不是ON_MESSAGE
      

  6.   

    试试用SendMessage(AfxGetMainWnd()->m_hand,xxx,xxx);
      

  7.   

    试试create一个wnd变量--》注册窗口句柄--》然后循环取消息。
    while(bShutdown){ peekMessage()...... }不好意思,很久没写C++了,意思是对的,应该看的懂吧.
      

  8.   

    如果用消息映射的话,PostThreadMessage()对应的消息映射宏为
    ON_THREAD_MESSAGE而不是ON_MESSAGE
    这里改了也没有用啊
      

  9.   

    void CUdpTestComm::HandleTimeout()
    {
    OutputDebugString("超时启动下一次启动测试CUdpTestComm::HandleTimeout()\n"); DWORD curTick = GetTickCount();//得到当前系统时间
    DWORD EndTick = curTick + 20;

    //如果当前时间小于没有到延时的5秒,那么继续发送TimeHandleWindowMessage消息
    //如果当前系统时间,超过5秒,那么执行下一次发送
    while(curTick < EndTick)
    {
    curTick = GetTickCount();
    Sleep(1);
    };
    SendOneTimes(UP_TEST_PACKET);//执行下一次发送任务,不会执行到这里
    }