CWnd::OnSetCursor 是 MFC(Microsoft Foundation Classes)中 CWnd 类的一个受保护方法,用于处理设置光标的操作。这个方法在鼠标光标即将显示在窗口上时被调用,允许您自定义光标的外观。

以下是 OnSetCursor 方法的典型声明:
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);

  •  pWnd 参数是指向窗口的指针。

  •  nHitTest 参数表示鼠标光标命中测试的类型。

  •  message 参数表示 Windows 消息代码。


在实际应用中,您可以重写这个方法以自定义光标的行为。例如:
BOOL CYourWndClass::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
    // 检查是否在窗口内
    if (nHitTest == HTCLIENT)
    {
        // 设置自定义光标
        ::SetCursor(::LoadCursor(NULL, IDC_HAND)); // 例如,设置为手型光标
        return TRUE; // 返回 TRUE 表示已经处理了光标设置
    }

    // 如果不在窗口内,调用基类实现
    return CWnd::OnSetCursor(pWnd, nHitTest, message);
}

上述代码中,如果鼠标在窗口客户区域(HTCLIENT)内,就会设置光标为手型光标,然后返回 TRUE 表示已经处理了光标的设置。如果鼠标不在窗口客户区域,就调用基类的实现。

为了使用这个方法,您需要在消息映射中添加对应的宏,例如:
BEGIN_MESSAGE_MAP(CYourWndClass, CWnd)
    // 其他消息映射...
    ON_WM_SETCURSOR()
END_MESSAGE_MAP()

这样,当系统需要设置窗口光标时,OnSetCursor 方法就会被调用。


转载请注明出处:http://www.pingtaimeng.com/article/detail/23675/MFC/CWnd