我要实现捕获鼠标移动消息得到鼠标移动的位置坐标,然后将获取的位置坐标数据发送到服务器!
先写了一个发送数据的线程类,在线程中实现跟服务器的连接以及发送数据,可是当捕获mouse_move
消息时,就执行线程!当鼠标一直移动时,就一直调用线程,这样做好像不太对!!同时捕获的坐标数据怎么传给线程类了??这些问题都不能解决!
请教我要实现此功能,同时要借用线程实现发送处理?应该怎么做才对?几个问题套在一起我想不出什么好的实现办法了,求大家帮我想想!谢谢!!!

解决方案 »

  1.   

    把您收到的WM_MOUSEMOVE转post给新的线程,在新的线程里加入messageloop,专门接收WM_MOUSEMOVE和WM_QUIT(WM_QUIT用来退出线程用的).
      

  2.   

    我的意思是把原线程接收到的WM_MOUSEMOVE消息用PostMessage转发给新线程,新线程就重复的检查消息队列,一得到WM_MOUSEMOVE消息就把位置坐标数据发送到服务器。
      

  3.   

    PostMessage好像一定要是在窗口上吧,有创苦接受的话是可以的,如果没有那可能不行,线程间的通讯方式还是很多的,如共享内存,邮件槽,socket,管道。你随便挑一种方式都可以。
      

  4.   

    楼上说的正确,改了改了,用PostThreadMessage。
      

  5.   

    请教楼上的朋友!!
    "把原线程接收到的WM_MOUSEMOVE消息用PostMessage转发给新线程"
    ....
    case WM_MOUSEMOVE:
      ::PostMessage(s_hWnd,WM_MOUSEMOVE, wParam, lParam);这里的参数怎么写,就可以转发给新线程???????
       ::AfxBeginThread(Move,s_hWnd,THREAD_PRIORITY_BELOW_NORMAL);
    ......
    }
    UINT CMoveThread::Move(LPVOID lpV)  //线程执行函数
    {
       ”新线程就重复的检查消息队列“ 这里应该怎么写?????
    } 谢谢!麻烦你再给我看看!!!
      

  6.   

    ....
    case WM_MOUSEMOVE:
      ::PostThreadMessage(idThread,WM_MOUSEMOVE, wParam, lParam);
    ......}
    idThread 是thread identifier,这里是不是得用CreateThread()完成创建线程,而不能用AfxBeginThread创建线程了 ??"新线程就重复的检查消息队列" 实现这个功能应该怎么写代码?实在不好意思,我对VC
    不太熟悉,希望好心的朋友多帮忙!!!
      

  7.   

    把鼠标消息放在一个共享全局struct变量里面.
    struct mousestruct{
    DWORD wParam;
    DWORD lParam;
    };
    mousestruct ms----------
    case WM_MOUSEMOVE:
    EnterCriticalSection(&cs);
    ms.wParam=wParam;
    ms.lParam=lParam;
    LeaveCriticalSection;线程中取wParam, lParam同样处理。