在mousemove中使用
if(rect.PtInRect(point)) 
MessageBox("hi");不起作用,即使鼠标落入有效区域。

解决方案 »

  1.   

    这个rect是怎样得来的。
    要注意,鼠标操作都是屏幕坐标,即point是相对于屏幕左上角的偏移。
    如果rect是设备坐标,则需要转换成屏幕坐标
      

  2.   


    由此而来->GetWindowRect(&rect)
    rect (top,bottom,left,right),观察rect运行数据,正常。
      

  3.   

    ::GetWindowRect (GetDlgItem(IDC_BUTTON1)->m_hWnd, rc);
    ScreenToClient (rc);   //转换过来
    if (rc.PtInRect (point))
    {
       MessageBox("hi"); 
    }
      

  4.   

    GetWindowRect返回的是屏幕坐标
    而mousemove里面获取的是对话框的相对坐标
    因此要把鼠标的坐标转换位屏幕坐标,可以用ClientToScreen(&point)转换后,就可以实现你的目的了
      

  5.   

    ScreenToClient 
    把屏幕坐标转换成客户区坐标
      

  6.   

    对了忘了告诉你,如果你的那个控件是button
    则需要先SetCapture,完后记得要ReleaseCapture.如果区域不是按钮区域的话就不用SetCapture了!
      

  7.   

    谢谢iyranly 
    可以了,但SetCapture太霸道了,结果是只有这一个功能可以用,其他功能都给屏蔽掉了。
    看来,在什么位置放ReleaseCapture是个学问
      

  8.   

    那个当然很霸道的
    在mousemove最后一行释放掉就可以了