鼠标在特定矩形区域移动的问题

shihaojie1219 2011-03-01 10:42:27
我想在视图的客户区里实现当鼠标在特定的矩形区域移动时绘制该矩形区域的边界,请问有没有什么好的方法?貌似用CRectTracter类不能响应鼠标移动消息啊?
...全文
178 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2011-03-01
  • 打赏
  • 举报
回复
或者是直接获得鼠标位置,与目标矩形区域比较.不过这种办法可能有点不效率
xiaohuh421 2011-03-01
  • 打赏
  • 举报
回复
HitTest
shihaojie1219 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyazhe 的回复:]
想画蚂蚁线还是想绘制鼠标移动限制的范围?
[/Quote]
-----------------------------
比如客户区区域CRect(10,10,100,100),现在我移动鼠标,当鼠标移到CRect(10,10,100,100)区域上时,立即绘制矩形pdc->Rectangle(CRect(10,10,100,100)),当鼠标从区域上移走时,立即擦除矩形边框。请问这个怎么好实现?因为我程序有很多这样的区域,自己在MouseMove函数里判断鼠标位置再绘制比较麻烦,我想知道有没有什么好的实现方法。我感觉CRectTrack类有点像,但它要在矩形区域内单击才能显示边界矩形啊~~谢谢~~
mayudong1 2011-03-01
  • 打赏
  • 举报
回复
在鼠标移动消息中判断鼠标位置,如果在矩形区域内就绘制出矩形边界,如果不在就隐藏边界
兔子-顾问 2011-03-01
  • 打赏
  • 举报
回复
想画蚂蚁线还是想绘制鼠标移动限制的范围?
shihaojie1219 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xianglitian 的回复:]
你是这意思么?

C/C++ code
#include<afxwin.h>
#include<math.h>
class CMyWnd:public CFrameWnd
{
BOOL m_bIsDraw;
CRect m_rectFrame;

public:
CMyWnd();
protected:
afx_msg void……
[/Quote]
----------------------------
目前我的程序就是这种方法,不好。另外你的代码少了擦除部分。
向立天 2011-03-01
  • 打赏
  • 举报
回复
你是这意思么?
#include<afxwin.h>
#include<math.h>
class CMyWnd:public CFrameWnd
{
BOOL m_bIsDraw;
CRect m_rectFrame;

public:
CMyWnd();
protected:
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
};
BEGIN_MESSAGE_MAP(CMyWnd,CFrameWnd)
ON_WM_PAINT()
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
CMyWnd::CMyWnd()
{
m_rectFrame.SetRect(10, 10, 100, 100);
}
void CMyWnd::OnPaint()
{
CPaintDC dc(this);
if(m_bIsDraw)
{
dc.FrameRect(m_rectFrame, &CBrush(RGB(255, 0, 0)));
}
}
class CMyApp:public CWinApp
{
public:
BOOL InitInstance();
};

BOOL CMyApp::InitInstance()
{
CMyWnd *pFrame=new CMyWnd;
pFrame->Create(0,_T("title")/*,WS_SYSMENU*/);
pFrame->ShowWindow(m_nCmdShow);
this->m_pMainWnd=pFrame;
return TRUE;
}
CMyApp ThisApp;

void CMyWnd::OnMouseMove(UINT nFlags, CPoint point)
{
m_rectFrame.PtInRect(point)?m_bIsDraw = true : m_bIsDraw = false;

InvalidateRect(m_rectFrame);

CFrameWnd::OnMouseMove(nFlags, point);
}

代码可在win32工程下
连MFC库直接编译

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧