代码之家  ›  专栏  ›  技术社区  ›  Coder

如何在winapi/mfc中设计更清晰的邮件链

  •  1
  • Coder  · 技术社区  · 14 年前

    我有一个多帧的MFC GUI应用程序(有点像主窗口的Outlook行为,在新的帧中创建消息/约会窗口,或者像Skype一样的多帧同步),我需要通过窗口层次结构对malloc'ed数据进行后期消息处理。

    比如,我得到了字符串、wcsdup、postmessage(wm_newstring,…)以及层次结构深处的某个控件处理它,或者如果没有订户,消息就被清除了。

    我现在正在研究的是,所有消息都被发布到应用程序线程,线程找到活动的框架或最合适的框架,将消息传递给它,框架将消息传递给它的视图,视图将消息传递给子视图等等,如果没有视图来处理消息,它将得到一个E·D

    问题是,这些链接命令编写起来相当麻烦,因为我必须在我拥有的每个CWND类中复制消息转发代码。同时,资源清理非常不愉快,因为如果没有窗口来捕捉消息,就必须有人调用free。因此,简单地将消息发送到主消息泵,而不进行额外的处理,希望有人总是能够捕获它,这不是一种有效的方法。postmessage返回s ou ok,没有人将消息视为可处理的,并且消息悬空。

    有没有更好的,正确的方法来解决我正在寻找的问题?

    1 回复  |  直到 14 年前
        1
  •  1
  •   l33t    13 年前

    我永远不会用 PostMessage 如你所描述的。我的解决方案通常包括握手:

    // From CNotifierBlah
    PostMesssage(hWnd, UWM_NEW_DATA, 0, 0);
    //
    LRESULT CDestinationWnd::OnNewData(WPARAM wParam, LPARAM lParam)
    {
        CNewData newData = GetNotifierBlah().GetNewData(); // Thread-safe getter!
    }
    

    几乎和 Observer pattern