更新时间:2015-12-24 16:47:49浏览次数:1+次
在文章《win32鼠标移动实时提示信息框的自动消失功能实现》中,我们已经分析实现了鼠标移动实时提示框的显示和自动消失的功能。然而却发现,主窗口移动离开左上角之后,提示框竟然没有跟着光标跑。效果图如下:
那么我们如果将提示框的WM_POPUP风格去掉,则会导致提示框贴在客户区,移动后就出现大量的痕迹,如下图所示:
InvalidateRect(hwnd,NULL,TRUE);
然而这样会导致客户区非常的闪烁,效果不尽如人意。所以,我们还是找到问题的根本。那就是将传入的坐标转换一下。将要传入的主窗口的客户区转换为屏幕坐
标。这样,经这个屏幕坐标传给提示框,提示框依然可以定位到光标附近的位置。将客户区坐标转换为屏幕坐标的意思就是,在你当前看到的主窗口的这个光标位
置,当前是用主窗口坐标来定位光标位置的,转换后就是用整个屏幕的位置来定位当前你看到的光标的这个位置。实际上,你看到的光标位置,都是同一个位置。转
换坐标只是换了一个定位的参考坐标系而已,并没有改变改变的位置。代码如下:POINT ptScreen;
ptScreen.x = GET_X_LPARAM(lParam);
ptScreen.y = GET_Y_LPARAM(lParam);
ClientToScreen(hwnd,&ptScreen);
相关资讯