首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MFC 多重訊息映射:責任鏈模式實現順序調用

     編輯:程式設計疑難解答

MFC 訊息映射預設一個訊息對應一個處理函數。若需一個訊息觸發多個處理邏輯且保證順序,可採用 責任鏈模式:

實作架構

// 抽象處理者
class IMessageHandler {
public:
    virtual ~IMessageHandler() {}
    virtual bool Handle(UINT msg, WPARAM wp, LPARAM lp) = 0;
    void SetNext(IMessageHandler* next) { next_ = next; }
protected:
    IMessageHandler* next_ = nullptr;
};

// 具體處理者
class DrawHandler : public IMessageHandler {
public:
    bool Handle(UINT msg, WPARAM wp, LPARAM lp) override {
        if (msg == WM_PAINT) { /* 繪圖邏輯 */ return true; }
        return next_ ? next_->Handle(msg, wp, lp) : false;
    }
};

class LogHandler : public IMessageHandler { ... }

// 視窗類別掛載鏈頭
class MyWnd : public CWnd {
    IMessageHandler* chainHead_;
    afx_msg LRESULT OnMyMessage(WPARAM wp, LPARAM lp) {
        return chainHead_->Handle(WM_MY_MSG, wp, lp) ? 0 : DefWindowProc(...);
    }
};

優點

  • 解耦:各處理邏輯獨立類別,易測試、替換。
  • 順序可控:鏈接順序即執行順序,動態增減處理者。
  • 符合開閉原則:新增處理無需修改視窗類別。

參考:責任鏈模式 C++ 實現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved