只有移动鼠标后,ShowCursor才会生效
ShowCursor has no effect until the mouse is moved
当同时按下左键和右键时,我需要隐藏光标。事实证明,除了鼠标移动出现小故障外,我的代码运行正常。
当我调用ShowCursor(FALSE)时,光标将按预期隐藏。之后,当我调用ShowCursor(TRUE)时,光标不会再次出现,直到下一次鼠标移动。我的观点是,只有鼠标事件发生后才能绘制。有没有办法强制重新绘制光标?
代码:
void SG::CursorManager::hideCursor(void) {
while(ShowCursor(FALSE) >= 0);
}
void SG::CursorManager::showCursor(void) {
while(ShowCursor(TRUE) <= 0);
}
如果我正确理解光标在Windows中的工作方式,那么必须调用SetCursor(IDC_...)
才能立即显示光标。
问题是,光标通常从下面的窗口设置,作为对消息WM_SETCURSOR
的响应。ShowCursor()
的思想是禁用/启用WM_SETCURSOR
消息。禁用cursr时,它还会执行SetCursor(NULL)
,从而使光标消失。但是当启用光标时,它不能调用SetCursor(IDC_...)
,因为它不知道应该显示哪个光标。因此,它一直等到生成下一个WM_SETCURSOR
,直到鼠标移动。
相关文章:
- 将对象移动到std::shared_ptr
- 何时在引用或唯一指针上使用移动语义
- 如何从具有移动语义的类对象中生成共享指针
- 将shared_ptr移动到<StructA>shared_ptr<变体<结构A、结构 B>>
- C / C++ 移位/偏移/向左或向右移动位图?
- MSVC将仅移动结构参数解释为指针
- 自定义先决条件对移动分配运算符有效吗
- 返回值优化:显式移动还是隐式
- 当有分配器意识的容器被复制/移动时,反弹分配器是否被复制/移走
- 为什么复制而不是移动数据元素?
- 可以使用移动语义更改或改进此C++代码吗?
- 使lambda不可复制/不可移动
- c++在使用指针时移动语义
- 将QGraphicsItem的移动区域限制在多边形区域内
- SendInput()鼠标移动计算
- 按值 C++ 返回时进行双倍移动
- 移动二维数组中的字符
- 为什么不调用移动构造函数?(默认情况下只有构造器,没有别的)
- 安全到标准:移动会员?
- 只有移动鼠标后,ShowCursor才会生效