在视图类里添加左键响应函数OnLButtonDown

      在MFC中, View在MainFrame之上,如果把MainFrame当做一座白墙,View就是墙上的海报。即视类窗口始终覆盖在框架类窗口之上。

以工程Draw为例,右击CDrawView-->Add Windows Message Handler-->WM_LBUTTONDOWN-->Add Handler-->Edit Existing,如下图所示:

添加代码如下:

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	MessageBox("view clicked");//所添加的代码
	CView::OnLButtonDown(nFlags, point);
}

按F7--> Ctrl+F5,执行后的结果如下:


 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是一个简单的MFC应用程序,其中视图类 `CMyView` 包含响应鼠标事件的消息处理函数,可以实现鼠标画图功能: ```cpp // MyView.h #pragma once class CMyView : public CView { protected: DECLARE_DYNCREATE(CMyView) public: CMyView(); virtual ~CMyView(); protected: afx_msg void OnDraw(CDC* pDC); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnLButtonUp(UINT nFlags, CPoint point); afx_msg void OnMouseMove(UINT nFlags, CPoint point); DECLARE_MESSAGE_MAP() private: BOOL m_bDrawing; CPoint m_ptStart; CPoint m_ptEnd; }; // MyView.cpp IMPLEMENT_DYNCREATE(CMyView, CView) CMyView::CMyView() { m_bDrawing = FALSE; } CMyView::~CMyView() { } void CMyView::OnDraw(CDC* pDC) { // 绘制已经完成的图形 if (m_bDrawing) { pDC->MoveTo(m_ptStart); pDC->LineTo(m_ptEnd); } } void CMyView::OnLButtonDown(UINT nFlags, CPoint point) { m_bDrawing = TRUE; m_ptStart = m_ptEnd = point; SetCapture(); } void CMyView::OnLButtonUp(UINT nFlags, CPoint point) { m_bDrawing = FALSE; ReleaseCapture(); Invalidate(); } void CMyView::OnMouseMove(UINT nFlags, CPoint point) { if (m_bDrawing) { m_ptEnd = point; Invalidate(); } } BEGIN_MESSAGE_MAP(CMyView, CView) ON_WM_DRAWITEM() ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_MOUSEMOVE() END_MESSAGE_MAP() ``` 在这个应用程序中,`CMyView` 类继承自 `CView` 类,它包含了响应鼠标事件的消息处理函数 `OnLButtonDown`、`OnLButtonUp` 和 `OnMouseMove`,并且实现了鼠标画图功能。 其中,`OnLButtonDown` 函数在鼠标左键按下时被调用,设置了一个标志位 `m_bDrawing` 表示正在画图,记录了鼠标按下的位置 `m_ptStart`,并且调用了 `SetCapture` 函数来捕获鼠标消息。 `OnMouseMove` 函数在鼠标移动时被调用,如果正在画图,则记录当前鼠标位置 `m_ptEnd` 并且调用 `Invalidate` 函数来触发视图重绘。 `OnLButtonUp` 函数在鼠标左键放开时被调用,清除了标志位 `m_bDrawing`,释放了鼠标消息的捕获,并且调用了 `Invalidate` 函数来触发视图重绘。 在 `OnDraw` 函数中,如果正在画图,则使用 `MoveTo` 和 `LineTo` 函数绘制已经完成的图形。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sanqima

一键三连,多多益善

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值