首页
社区
课程
招聘
[求助]Visual c++ 6.0中怎样添加WM_MOUSELEAVE消息
发表于: 2008-12-13 01:04 4492

[求助]Visual c++ 6.0中怎样添加WM_MOUSELEAVE消息

xhK 活跃值
3
2008-12-13 01:04
4492
想做一个当鼠标移开窗口弹出个对话框的程序,看了微软的msdn有WM_MOUSELEAVE消息,可以捕捉到鼠标移去的信息,可是不知道在vc 6.0中怎样添加进去

高手帮忙给指明下,谢啦先

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
使用TrackMouseEvent()函数,才可以让系统发送WM_MOUSE消息。请参考MSDN关于API的说明和以下这个帖子。

http://bbs.pediy.com/showthread.php?t=76795
2008-12-13 03:47
0
雪    币: 159
活跃值: (38)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
3
我在msdn看到的,也是说要用TrackMouseEvent()
可是在MFC中有一个消息map的宏,不应该再去调用那个函数了吧
还是谢谢你
2008-12-13 09:28
0
雪    币: 159
活跃值: (38)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
4
解决了,找到了一个代码,原来是自己定义消息宏写错了
帖出来,有相同的问题的朋友可以看下
********************************************************************************

// TrackView.h changes
//

class CTrackView : public CView
{
// Add data members
protected:
        CRect m_rectLast;        //** Added line
        BOOL m_bMouseTracking;        //** Added line

// Add message handler prototype
        afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);        //** Added line

};

****************************************************************************************

// TrackView.cpp changes
//

// Add message handler
BEGIN_MESSAGE_MAP(CTrackView, CView)
        ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)        //** Added line
END_MESSAGE_MAP()

CTrackView::CTrackView()
{
        m_bMouseTracking = FALSE;        //** Added line
}

/////////////////////////////////////////////////////////////////////////////
// CTrackView message handlers

//** Added function
LRESULT CTrackView::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
        // Draw last rect, but no new one (erase old rect)
        CClientDC dc(this);
        dc.DrawDragRect(CRect(0,0,0,0), CSize(0,0), m_rectLast, CSize(2,2));
        m_rectLast = CRect(0,0,0,0);

        m_bMouseTracking = FALSE;
        return TRUE;
}

void CTrackView::OnMouseMove(UINT nFlags, CPoint point)
{
        // Calc new rectangle
        CRect rectNew(point.x-20, point.y-20, point.x+20, point.y+20);
        CClientDC dc(this);

        // WM_MOUSEMOVE + !m_bMouseTracking becomes the equivalent of
        // WM_MOUSEENTER of which there is no such thing.
        if (!m_bMouseTracking)
        {
                TRACKMOUSEEVENT tme;
                tme.cbSize = sizeof(TRACKMOUSEEVENT);
                tme.dwFlags = TME_LEAVE;
                tme.hwndTrack = this->m_hWnd;

                if (::_TrackMouseEvent(&tme))
                {
                        m_bMouseTracking = TRUE;

                        // Draw new rect, but no last rect as we are starting anew
                        dc.DrawDragRect(rectNew, CSize(2,2), NULL, CSize(0,0));
                }
        }
        else
        {
                // Draw new rect and erase old rect
                dc.DrawDragRect(rectNew, CSize(2,2), m_rectLast, CSize(2,2));
        }

        // Remember where we drew this rectangle
        m_rectLast = rectNew;

        CView::OnMouseMove(nFlags, point);
}

****************************************************************************************
2008-12-13 09:42
0
游客
登录 | 注册 方可回帖
返回
//