MFC笔记--消息

1.如果要使用SendMessage或者PostMessage触发某条消息,则在消息与消息响应函数关联时,要使用ON_MESSAGE而不是使用ON_COMMAND(自己感觉是这样,也不知道真的假的)

2.关于OnPaint()和OnDraw()均是WM_PAINT的消息响应函数,只不过OnPaint是CWnd类中声明定义的,而OnDraw是在CView中声明定义的,所以在XXXView类中,往往默认就有了OnDraw函数,而没有OnPaint函数。CView又是CWnd的一个子类,因此,要么就别再XXXView类中添加WM_PAINT的实现函数,此时对于重绘的消息会自动调用OnDraw函数,所以可以把重绘的操作写在OnDraw中。如果添加了WM_PAINT,要么就把重绘的操作写在OnPaint函数中;要么就把重绘的操作写在OnDraw中,然后再从OnPaint函数中调用OnDraw。下面以GraphicView为例:

  • 不手动添加WM_PAINT消息时的响应函数:
  • void CGraphicView::OnDraw(CDC* pDC)
    {
    	CGraphicDoc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
    	// TODO: add draw code for native data here
    	CFont *pOldFont = pDC->SelectObject(&m_font);
    	pDC->TextOut(0, 0, m_strFontName);
    	pDC->SelectObject(pOldFont);
    }
  • 手动添加WM_PAINT消息
  • 在Onpaint中调用OnDraw:
  • <pre name="code" class="cpp">void CGraphicView::OnPaint() 
    {
    	CPaintDC dc(this); // device context for painting
    	
    	// TODO: Add your message handler code here
    	OnDraw(&dc);
    	// Do not call CView::OnPaint() for painting messages
    } 
    
     
  • 然后重绘操作OnPaint函数中实现:
  • <pre name="code" class="cpp">void CGraphicView::OnPaint() 
    {
    	CPaintDC dc(this); // device context for painting
    	
    	// TODO: Add your message handler code here
    	CFont *pOldFont = dc.SelectObject(&m_font);
    	dc.TextOut(0, 0, m_strFontName);
    	dc.SelectObject(pOldFont);
    	// Do not call CView::OnPaint() for painting messages
    }
     
  • 使用Invalidate函数,使窗口无效(将WM_PAINT消息放入消息队列中)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值