在ATL中除了创建自己的窗口接收消息以外,还有什么方法可以接收消息

解决方案 »

  1.   

    看看发送消息的函数SendMessage,第一个参数就是窗体句柄
      

  2.   

    event sink.
    You will receive notifications if you implement any event sink.
      

  3.   

    To ->aspnetwuxueyou(Postmortem)
    能在具体点吗?最好有一些简单代码示例。
      

  4.   

    search DispSink in msdn 
    1. in header file
    class ATL_NO_VTABLE CDispCtl : 
    public CComObjectRootEx<CComSingleThreadModel>,
    public IDispatchImpl<IDispCtl, &IID_IDispCtl, &LIBID_DISPCLIENTLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
    public CComControl<CDispCtl>,
    public IPersistStreamInitImpl<CDispCtl>,
    public IOleControlImpl<CDispCtl>,
    public IOleObjectImpl<CDispCtl>,
    public IOleInPlaceActiveObjectImpl<CDispCtl>,
    public IViewObjectExImpl<CDispCtl>,
    public IOleInPlaceObjectWindowlessImpl<CDispCtl>,
    public IPersistStorageImpl<CDispCtl>,
    public ISpecifyPropertyPagesImpl<CDispCtl>,
    public IQuickActivateImpl<CDispCtl>,
    public IDataObjectImpl<CDispCtl>,
    public IProvideClassInfo2Impl<&CLSID_DispCtl, NULL, &LIBID_DISPCLIENTLib>,
    public CComCoClass<CDispCtl, &CLSID_DispCtl>,
    public IDispEventImpl<1, CDispCtl, &DIID__IDispServEvents>
    {
    ......................................
    //Map used to sink events.
    BEGIN_SINK_MAP(CDispCtl)
    SINK_ENTRY_EX(1, DIID__IDispServEvents, 1, OnTransmit)
    END_SINK_MAP()
    };2. in .cpp file
    STDMETHODIMP CDispCtl::OnTransmit(VARIANT data)
    {
    if(data.vt == VT_BSTR)
    {
    VariantClear(&m_OutText);
    VariantCopy(&m_OutText, &data);
    }
    FireViewChange();
    return S_OK;
    }
    You will receive notification from interface whose IID is DIID__IDispServEvents