您的位置:首页 > 其它

修改鼠标光标的形状(二)

2007-05-07 22:11 225 查看
继续上一篇文章未完的话题,下面继续通过代码对之前提到的三种方法进行解释。

在 CMyDialog 增加成员变量 HCURSOR m_hMyCurosr; 并在 CMyDialog 构造函数中将其初始化:

m_hMyCurosr = NULL;

我的想法是通过 CMyDialog::m_hMyCurosr 来保存所要使用的鼠标光标形状,当其为 NULL 的时候,则使用系统默认的鼠标光标。另外在 CMyDialog 中增加 public 成员函数 SetMyCursor() 供外部调用(这个大家应该可以理解吧),其实现如下:

//////////////////////////////////////////////////////
//
// 函数名: CMyDialog::SetMyCursor
//
// 访问权: public
//
// 描述: 设置新的鼠标光标
//
// 参数:
// hCursor
// 新的鼠标光标句柄,为 NULL 表示使用系统默认鼠标光标形状
//
// 返回值: 返回之前所使用的鼠标光标句柄
//
//////////////////////////////////////////////////////
HCURSOR CMyDialog::SetMyCursor(HCURSOR hCursor)
{
HCURSOR hRet = m_hMyCurosr;
m_hMyCurosr = hCursor;
return hRet;
}

方法一:在处理 WM_SETCURSOR 消息的时候调用 API 函数 SetCursor() 来修改鼠标光标形状。

如果鼠标引起光标在某个窗口中移动,且鼠标输入没有被捕获时,该窗口就会收到 WM_SETCURSOR 消息,我们可以把 WM_SETCURSOR 理解成是专门用来设置鼠标光标形状的消息,在 VC6 中通过 ClassWizard 可以自动生成 WM_SETCURSOR 对应的消息函数 OnSetCursor(),其实现如下:

ON_WM_SETCURSOR()

BOOL CMyDialog::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if ((HTCLIENT == nHitTest)
&& (m_hMyCurosr != NULL))
{
::SetCursor(m_hMyCurosr);
return TRUE;
}
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}

*要注意的是,当设置了鼠标光标以后,您应该让函数返回 TRUE 以防止系统再作缺省处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: