一基于对话框程序,调用了一个全局鼠标钩子DLL,当点击对话框上一按钮,将DLL中一标志设为1,然后在MOUSEPROC中,如果标志为1的话,如果又发生了鼠标左击事件,就向对话框发送自定义消息,并丢掉左击消息(为防止发生如切换等不希望的操作),然后对话框根据此时的鼠标位置获得当前点的颜色,然后将标志清零。大致过程就是这样,发生了如下问题。1。在发送自定义消息时,可以将附加信息放在LPARAM参数中,但在自定义的消息的响应函数中,应该如何取得这个参数?
2。丢掉鼠标左击消息,通常都可用了,但是在鼠标如果点击到程序的标题栏以及其他程序的标题栏时,并没有采集到颜色,而是没反应或者干脆激活其他程序,这种情况应该处理哪种鼠标消息?
3。对话框程序,在DEBUG版本运行还正常,但RELEASE版本一旦开始采集,并左击后,就会出现“该内存不能为读”的这种错误,应该如何解决?

解决方案 »

  1.   

    1。在发送自定义消息时,可以将附加信息放在LPARAM参数中,但在自定义的消息的响应函数中,应该如何取得这个参数?
    強制轉換就是
    POINT s=(POINT)lParam2。丢掉鼠标左击消息,通常都可用了,但是在鼠标如果点击到程序的标题栏以及其他程序的标题栏时,并没有采集到颜色,而是没反应或者干脆激活其他程序,这种情况应该处理哪种鼠标消息?
    點擊菜單條時不是處理WM_LBUTTONDOWN.
    而是WM_NCLBUTTONDOWN或是其它
      

  2.   

    3,你可以看看
    http://expert.csdn.net/Expert/TopicView1.asp?id=2650787
    对你有没有帮助!
      

  3.   

    1.我曾试图在自定义的消息处理函数中加参数,形如
    void CTestDlg::OnRec(LPARAM lparam)
    {
    ...
    }
    但问题是,这个形参根本不会得到值啊,没有东西传递给它。
    而系统自己生成的,如
    void CTestDlg::OnMouseMove(CPoint point)
    {
    }
    有消息的参数传递给这个point了,对于自定义的该怎么办?今天想,好像可以重载Pretranslatemsg,当有自定义消息时取得它的参数,并调用onrec就可以了,但是这样的话,自定义消息都可以这么做,那手动添加消息影射,又有什么意义呢?比如手动写 afx_msg_void,
    2。等我试下看。
    3。学习中。
      

  4.   

    啊,对于通常的消息响应函数,如果它有参数的话,窗口函数在调用的同时也会传递给它参数,对于自定义的消息应该怎么做?
    就是SENDMESSAGE()中的第三和第四个参数的值,我该如何去取得并在消息响应函数中处理?
    如果用pretranslatemsg的话,那么手动添加的消息影射信息,还有什么意义呢?
      

  5.   

    给你点提示:
    if(::PeekMessage( &msg, NULL,0,0,PM_REMOVE)))

        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }