注册 登录
编程论坛 VC++/MFC

判断鼠标指向自带滚动条

rzwm 发布于 2013-02-18 11:08, 800 次点击
MFC中CScorllView自带了滚动条。那怎么判断鼠标指向了该滚动条呢?我想让鼠标在滚动条上时改变光标。
8 回复
#2
yuccn2013-02-18 12:29
没有试过,但是可以知道,滚动条也是一个窗口的。可以对滚动条进行重绘,重写下滚动条的事件就可以了。
#3
rzwm2013-02-18 15:43
没有其他更简单点的方法吗?有哪个大虾指点指点吗?
#4
hahayezhe2013-02-18 17:26
重写滚动条 重写滚动条的 鼠标消息响应函数

话说这很难吗?
#5
rzwm2013-02-18 17:47
当鼠标移动到滚动条上,滚动条颜色变为浅蓝色;点击移动的时候,滚动条变为深蓝色;这就证明实际上滚动条的状态是内部已有的,我就想是否有直接判断滚动条颜色是否为浅蓝色的方法。另外对于我来说,重绘滚动条还是有难度的……
#6
Susake2013-02-18 17:52
华丽飘过
#7
yuccn2013-02-18 18:43
回复 4楼 hahayezhe
对于没有自绘过控件的人来说,这是个难事了。呵呵
楼主去搜索下自绘滚动条的代码来参考下就行了
#8
rzwm2013-02-19 10:22
问题已经解决了,不需要重绘滚动条。
我的程序是客户区有特别光标,要求指到滚动条要变为普通的。问的时候没说清楚。
因为滚动条属于客户区,而又不包含在GetClientRect()里所以我在OnSetCursor()里把滚动条给排除掉了。
代码如下:
BOOL CSingleWBView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
    CRect rectClient;
    GetClientRect(&rectClient);

    CPoint point;
    GetCursorPos(&point);
    ScreenToClient(&point);

    CRgn rgn;
    rgn.CreateRectRgn(rectClient.left, rectClient.top, rectClient.right, rectClient.bottom);

    if (!rgn.PtInRegion(point))
    {
        rgn.DeleteObject();
        return CScrollView::OnSetCursor(pWnd, nHitTest, message);
    }
}
结贴。
#9
rzwm2013-02-19 10:24
代码下边多了一个},这只是一部分,所以没有结束。
1