SetCapture影响SetClassLong设置的鼠标样式
2012-09-27 14:56
323 查看
鼠标左键按下后的响应代码
通过SetClassLong设置了窗口的鼠标样式,然后又通过SetCapture对这个窗口来捕获鼠标。
当把SetCapture注释掉,可以看到鼠标左键按下后,鼠标样式确实发生了改变,但为何SetCapture之后鼠标样式却不发生变化,笔者暂未找到原因所在。我想大概是Setcapture不经捕获鼠标还会改变鼠标样式吧。
使用SetCapture后需要更换鼠标样式,解决办法可以使用SetCursor来改变鼠标样式:
当然最好是在WM_LButtonUp的消息响应函数中将鼠标样式改回来:
如果之前的鼠标指针不是IDC_ARROW的话,可以在OnLBttonDown里SetCursor的时候保存旧的指针,然后在这里设置回来。
LRESULT CDlgImageView::OnLButtonDown( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ) { SetClassLong(*this, GCL_HCURSOR, (LONG)::LoadCursor(NULL, IDC_HAND)); // 设置鼠标样式 SetCapture(*this); // 捕获鼠标 return 0; }
通过SetClassLong设置了窗口的鼠标样式,然后又通过SetCapture对这个窗口来捕获鼠标。
当把SetCapture注释掉,可以看到鼠标左键按下后,鼠标样式确实发生了改变,但为何SetCapture之后鼠标样式却不发生变化,笔者暂未找到原因所在。我想大概是Setcapture不经捕获鼠标还会改变鼠标样式吧。
使用SetCapture后需要更换鼠标样式,解决办法可以使用SetCursor来改变鼠标样式:
LRESULT CDlgImageView::OnLButtonDown( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ) { SetCapture(*this); // 捕获鼠标 ::SetCursor((HCURSOR)::LoadCursor(NULL, IDC_HAND)); // 鼠标设置为手状表示可以移动窗口 return 0; }
当然最好是在WM_LButtonUp的消息响应函数中将鼠标样式改回来:
LRESULT CDlgImageView::OnLButtonUp( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ) { ReleaseCapture(); // 释放鼠标 ::SetCursor((HCURSOR)::LoadCursor(NULL, IDC_ARROW)); // 鼠标指针设置回标准 return 0; }
如果之前的鼠标指针不是IDC_ARROW的话,可以在OnLBttonDown里SetCursor的时候保存旧的指针,然后在这里设置回来。
相关文章推荐
- android 控件 getBackground().setAlpha设置透明值,影响其他页面样式问题
- SetClassLong不能立即设置效果 需要重绘。
- SetClassLong,GetClassLong 动态改变光标
- JAVA中自定义设置鼠标样式
- 利用a 内置class 设置一类连接的样式
- SetClassLong
- Flex 4在组件外部重设已在skin class内设置的样式
- WPF 设置DataGrid 鼠标移动改变行颜色样式
- jquery实现页面刷新后保留鼠标点击addclass的样式
- 通过程序设置鼠标的样式
- bootstrap会影响地图上某些样式,设置样式方法
- Flex 中设置鼠标样式的两种方法
- Flex—鼠标样式设置
- winform中为控件设置鼠标样式
- vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
- 利用OpenCV鼠标事件设置函数setMouseCallback显示图像像素坐标值!
- bootbox自定义dialog、confirm、alert样式,以及基本设置方法setDefaults中可用参数
- shareSDK 不设置 oks.setImagePath 造成样式不显示bug
- JavaScript(获取或设置html元素的宽,高,坐标),确定和判断鼠标是否在元素内部,二级导航菜单鼠标离开样式问题解决
- WinAPI: SetCursorPos - 设置鼠标指针位置