怎么PtInRect(point)) 不起作用? 在mousemove中使用if(rect.PtInRect(point)) MessageBox("hi");不起作用,即使鼠标落入有效区域。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个rect是怎样得来的。要注意,鼠标操作都是屏幕坐标,即point是相对于屏幕左上角的偏移。如果rect是设备坐标,则需要转换成屏幕坐标 由此而来->GetWindowRect(&rect)rect (top,bottom,left,right),观察rect运行数据,正常。 ::GetWindowRect (GetDlgItem(IDC_BUTTON1)->m_hWnd, rc);ScreenToClient (rc); //转换过来if (rc.PtInRect (point)){ MessageBox("hi"); } GetWindowRect返回的是屏幕坐标而mousemove里面获取的是对话框的相对坐标因此要把鼠标的坐标转换位屏幕坐标,可以用ClientToScreen(&point)转换后,就可以实现你的目的了 ScreenToClient 把屏幕坐标转换成客户区坐标 对了忘了告诉你,如果你的那个控件是button则需要先SetCapture,完后记得要ReleaseCapture.如果区域不是按钮区域的话就不用SetCapture了! 谢谢iyranly 可以了,但SetCapture太霸道了,结果是只有这一个功能可以用,其他功能都给屏蔽掉了。看来,在什么位置放ReleaseCapture是个学问 那个当然很霸道的在mousemove最后一行释放掉就可以了 在dll的导出函数前面是否一定要加CALLBACK修饰符? OnPaint里的new后内存怎么办,在线等!!! 图像极值点 如何把数值0xAB转换成两个字符'A''B'这种形式? CreateThread的问题 闲得慌,散分玩~~ 控件边框的颜色 CListCtrl 偶尔出现乱码 将窗口分割为两个,如何在两个分割子窗口中输出文字 调试问题! 高手指点!!!!!! 系统组合键触发的消息不如(windows键) CPropSheet放在哪的问题?
要注意,鼠标操作都是屏幕坐标,即point是相对于屏幕左上角的偏移。
如果rect是设备坐标,则需要转换成屏幕坐标
由此而来->GetWindowRect(&rect)
rect (top,bottom,left,right),观察rect运行数据,正常。
ScreenToClient (rc); //转换过来
if (rc.PtInRect (point))
{
MessageBox("hi");
}
而mousemove里面获取的是对话框的相对坐标
因此要把鼠标的坐标转换位屏幕坐标,可以用ClientToScreen(&point)转换后,就可以实现你的目的了
把屏幕坐标转换成客户区坐标
则需要先SetCapture,完后记得要ReleaseCapture.如果区域不是按钮区域的话就不用SetCapture了!
可以了,但SetCapture太霸道了,结果是只有这一个功能可以用,其他功能都给屏蔽掉了。
看来,在什么位置放ReleaseCapture是个学问
在mousemove最后一行释放掉就可以了