自定义消息传递(从对话框到视图)

问题:系统通过菜单项弹出一个对话框,需要视图响应该对话框的消息并更新视图。不可能在视图类中直接建立对话框控件的消息响应函数,因此需要自定义消息传递。由对话框发出消息,视图类接收,并作出重绘动作更新视图。

 

解决方法:

 

1)在应用程序类的头文件中,C***App类声明的前面定义消息宏:

#pragma once

#include "resource.h"   

 

#define WM_USER_REDRAW (WM_USER + 1) // 自定义消息宏, WM_USER定义了非系统消息宏的起始位置,用户自定义的消息必须在位于其后的 ,所以定义为WM_USER + 1,如果有多个自定义消息可以用WM_USER + 2、WM_USER + 3 ... ...

 class CMyApp : public CWinApp
 {
   public:
       CMyApp();
   public:
      virtual BOOL InitInstance();

... ...

... ...
2)在视图类中建立对自定义消息响应的函数:

   在视图类头文件中声明自定义消息响应函数:

//CMyView.h

... ...

... ...

public:

    afx_msg LRESULT OnReDraw (WPARAM wParam,LPARAM lParam);

 

... ...

... ...

 

  在视图类实现文件中定义函数体

 

//CMyView.cpp

... ...

... ...

... ...

BEGIN_MESSAGE_MAP(COntoPlantView, CView)

    ON_MESSAGE (WM_USER_REDRAW,OnReDraw)

 

    .......

END_MESSAGE_MAP()

LRESULT CMyView::OnReDraw(WPARAM wParam,LPARAM lParam)
{
   ... ...

  // 视图重绘代码

  ... ...

     return 1;
}

3)在对话框的消息响应函数中传递自定义消息;

void CMyDlg::OnReDraw()
{
 // TODO: 在此添加消息处理程序代码和/或调用默认值

  CFrameWnd* pFrameWnd = STATIC_DOWNCAST(CFrameWnd, AfxGetMainWnd());
  CView* pView = pFrameWnd->GetActiveFrame()->GetActiveView();


  pView->SendMessage(WM_USER_REDRAW,0,0); //向视图类传递消息

 

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值