winapi - MFC:带有派生 CButton 子项的 CDialogEx 在按钮上方时不会更改光标?
问题描述
我希望在CDialogEx
窗口上方时禁用光标,但在派生的子按钮上方CButton
显示标准光标时。
为了使鼠标光标不显示,我必须覆盖该WM_SETCURSOR
消息(使用光标注册一个类NULL
不起作用)。
BOOL CMyDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if (nHitTest==HTCLIENT) {
::SetCursor(NULL);
return TRUE;
}
return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
}
在子按钮上我有:
BOOL CMyButton::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
HCURSOR hcursor=::LoadCursor(NULL, IDC_ARROW);
SetCursor(hcursor);
return TRUE;
}
但是鼠标光标在按钮上时不显示?按钮函数被调用。我究竟做错了什么?
谢谢。
解决方案
将SetCursor()
中的调用CMyButton::OnSetCursor
改为使用::SetCursor(hcursor)
。原因是CButton::SetCursor()
没有设置光标,而是将图像设置为 in BM_SETIMAGE
(可能很奇怪)。
BOOL CMyButton::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
HCURSOR hcursor=::LoadCursor(NULL, IDC_ARROW);
::SetCursor(hcursor);
return TRUE;
}
推荐阅读
- python - 如何处理可能存在或不存在毫秒的日期时间转换情况?
- javascript - 在 JavaScript 中查找重复项并检查对象内的重复元素
- routes - 在 Fastify 中使用参数编写路由完整 URL
- android - Jetpack 中的地图组成
- snowflake-cloud-data-platform - 有没有办法解析 create view 语句并在 Snowflake 中其属性与其源表的属性之间生成链接?
- flutter - 参数类型“模式”不能分配给参数类型“字符串”?
- c++ - GCC 模糊继承增量
- gitlab - 如果前一个管道中正在运行相同的作业,如何等待 GitLab 作业?
- javascript - 如何通过第一级方括号拆分字符串?
- ssl - SSL_accept 在握手中随机失败,Openssl 版本 1.1.1k 中的致命解密错误