2009-10-02

如何改变按钮的光标

比如,当光标停在鼠标上方时,变成手形状的。

不要在OnSetCursor()之外设置,否则,那将得到相反的结果:当光标停在鼠标上方时是箭头,在其他地方变成手形状。

在OnSetCursor()中
        CRect rcStatic;   
        CPoint ptCursor;  

        GetCursorPos(& ptCursor);

            GetDlgItem(IDOK)->GetWindowRect(rcStatic);
            if(rcStatic.PtInRect(ptCursor))
            {
                SetCursor(m_hHandCursor);
                return TRUE;//注意,要return
            }

    //...
    //所有按钮的处理

    return CDialog::OnSetCursor(pWnd, nHitTest, message);

Hand形状的光标是系统预置,但是,如果直接用 LoadCursor(NULL, IDC_HAND); 则编译出错。
那是因为没有把#define IDC_HAND MAKEINTRESOURCE(32649) 给定义进来。
这是为什么呢?因为没有#define WINVER 0x0500。
不过,当你真的那样做了以后,会有一堆NOTE: WINVER has been defined as 0x0500 or greater which enables ...的提示。
哎,M$总是唧唧歪歪。
你觉得怎么好就怎么整吧。

No comments: