如何通过SendMessage在运行时动态设置光标形状?
Win32 控件动态设置光标形状实现
适用场景
需要在特定事件触发时动态调整光标显示样式,常见适配场景如下:
- 按钮处于禁用状态时,光标显示为默认箭头样式
- 编辑控件内容输入符合校验规则后,按钮切换为可点击状态,光标同步切换为手型样式
实现代码
// 加载系统手型光标 HCURSOR lCursor = LoadCursor(NULL, IDC_HAND); HCURSOR hCursor = SetCursor(lCursor); Button* btnLogin = new Button(hWnd); HWND hBtnLogin = btnLogin->getHandle(); // 向窗口发送消息为指定按钮设置光标 SendMessage(hWnd, WM_SETCURSOR, (WPARAM) hBtnLogin, (LPARAM) hCursor);
补充说明
如果需要在按钮禁用时切回箭头光标,只需将
LoadCursor的第二个参数替换为IDC_ARROW,重新发送WM_SETCURSOR消息即可。
系统内置光标无需手动调用DestroyCursor释放,提前销毁会导致光标显示异常。
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

