首页 > 解决方案 > 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;
}

但是鼠标光标在按钮上时不显示?按钮函数被调用。我究竟做错了什么?

谢谢。

标签: winapivisual-c++mfc

解决方案


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;
}

推荐阅读