自定義消息傳遞(從對話框到視圖)

問題:系統通過菜單項彈出一個對話框,需要視圖響應該對話框的消息並更新視圖。不可能在視圖類中直接建立對話框控件的消息響應函數,因此需要自定義消息傳遞。由對話框發出消息,視圖類接收,並作出重繪動作更新視圖。

 

解決方法:

 

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); //向視圖類傳遞消息

 

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章