MFC CCmdTarget Class成员变量及成员函数
2016-10-16 17:55
1001 查看
一、概要说明
该类派生于CObject,它封装了MFC的消息映射机制,希望接收系统事件和窗口消息的类都从它派生,如CDocument和CWnd分支。此外,在系统繁忙,无法响应窗口消息时,鼠标光标应该显示为沙漏形等待状态,CCmdTarget类封装了3个成员函数完成该功能。CCmdTarget类以一种类似消息映射的机制提供IDispatch接口,所以使用MFC可以轻松地编写AUTOMATION客户程序和组件。
二、类继承关系图
三、CCmdTarget主要成员函数
属性
FromIDispatch返回一个指向CCmdTarget对象的指针,该对象与IDispatch相联系
GetIDispatch返回一个指向IDispatch对象的指针,该对象与CCmdTarget对象相关
IsResultExpected如果自动函数要返回一个值,则返回非零值
操作
BeginWaitCursor显示沙漏标
EnableAutomation允许CCmdTarget对象的OLE自动函数
EndWaitCursor返回到前一个光标
RestoreWaitCursor重置沙漏标
可覆盖的函数
OnCmdMsg分派命令消息
OnFinalRelease在最后一个OLE对象参考被释放时清除环境
四、CCmdTarget头文件
该类派生于CObject,它封装了MFC的消息映射机制,希望接收系统事件和窗口消息的类都从它派生,如CDocument和CWnd分支。此外,在系统繁忙,无法响应窗口消息时,鼠标光标应该显示为沙漏形等待状态,CCmdTarget类封装了3个成员函数完成该功能。CCmdTarget类以一种类似消息映射的机制提供IDispatch接口,所以使用MFC可以轻松地编写AUTOMATION客户程序和组件。
二、类继承关系图
三、CCmdTarget主要成员函数
属性
FromIDispatch返回一个指向CCmdTarget对象的指针,该对象与IDispatch相联系
GetIDispatch返回一个指向IDispatch对象的指针,该对象与CCmdTarget对象相关
IsResultExpected如果自动函数要返回一个值,则返回非零值
操作
BeginWaitCursor显示沙漏标
EnableAutomation允许CCmdTarget对象的OLE自动函数
EndWaitCursor返回到前一个光标
RestoreWaitCursor重置沙漏标
可覆盖的函数
OnCmdMsg分派命令消息
OnFinalRelease在最后一个OLE对象参考被释放时清除环境
四、CCmdTarget头文件
class AFX_NOVTABLE CCmdTarget : public CObject { DECLARE_DYNAMIC(CCmdTarget) protected: public: // Constructors CCmdTarget(); ///构造函数 // Attributes LPDISPATCH GetIDispatch(BOOL bAddRef); // retrieve IDispatch part of CCmdTarget static CCmdTarget* PASCAL FromIDispatch(LPDISPATCH lpDispatch); // map LPDISPATCH back to CCmdTarget* (inverse of GetIDispatch) BOOL IsResultExpected(); // returns TRUE if automation function should return a value // Operations void EnableAutomation(); // call in constructor to wire up IDispatch void EnableConnections(); // call in constructor to wire up IConnectionPointContainer void BeginWaitCursor(); ///显示沙漏光标 /////※之间加入耗费机时的处理过程 void EndWaitCursor(); /////恢复为沙漏前的光标形状 void RestoreWaitCursor(); // call after messagebox ///重新将光标设置回沙漏形状,直到处理结束后调用EndWait Cursor() #ifndef _AFX_NO_OLE_SUPPORT // dispatch OLE verbs through the message map BOOL EnumOleVerbs(LPENUMOLEVERB* ppenumOleVerb); BOOL DoOleVerb(LONG iVerb, LPMSG lpMsg, HWND hWndParent, LPCRECT lpRect); #endif // Overridables // route and dispatch standard command message types // (more sophisticated than OnCommand) virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo); #ifndef _AFX_NO_OLE_SUPPORT // called when last OLE reference is released virtual void OnFinalRelease(); #endif #ifndef _AFX_NO_OLE_SUPPORT // called before dispatching to an automation handler function virtual BOOL IsInvokeAllowed(DISPID dispid); #endif #ifndef _AFX_NO_OLE_SUPPORT // support for OLE type libraries void EnableTypeLib(); HRESULT GetTypeInfoOfGuid(LCID lcid, const GUID& guid, LPTYPEINFO* ppTypeInfo); virtual BOOL GetDispatchIID(IID* pIID); virtual UINT GetTypeInfoCount(); virtual CTypeLibCache* GetTypeLibCache(); virtual HRESULT GetTypeLib(LCID lcid, LPTYPELIB* ppTypeLib); #endif // Implementation public: virtual ~CCmdTarget() = 0; #ifdef _DEBUG virtual void Dump(CDumpContext& dc) const; virtual void AssertValid() const; #endif #ifndef _AFX_NO_OLE_SUPPORT void GetNotSupported(); void SetNotSupported(); #endif protected: friend class CView; CView* GetRoutingView(); CFrameWnd* GetRoutingFrame(); static CView* PASCAL GetRoutingView_(); static CFrameWnd* PASCAL GetRoutingFrame_(); DECLARE_MESSAGE_MAP() // base class - no {{ }} macros #ifndef _AFX_NO_DOCOBJECT_SUPPORT DECLARE_OLECMD_MAP() friend class COleCmdUI; #endif #ifndef _AFX_NO_OLE_SUPPORT DECLARE_DISPATCH_MAP() DECLARE_CONNECTION_MAP() DECLARE_INTERFACE_MAP() #ifndef _AFX_NO_OCC_SUPPORT DECLARE_EVENTSINK_MAP() #endif // !_AFX_NO_OCC_SUPPORT // OLE interface map implementation public: // data used when CCmdTarget is made OLE aware long m_dwRef; LPUNKNOWN m_pOuterUnknown; // external controlling unknown if != NULL DWORD_PTR m_xInnerUnknown; // place-holder for inner controlling unknown public: // advanced operations void EnableAggregation(); // call to enable aggregation void ExternalDisconnect(); // forcibly disconnect LPUNKNOWN GetControllingUnknown(); // get controlling IUnknown for aggregate creation // these versions do not delegate to m_pOuterUnknown DWORD InternalQueryInterface(const void*, LPVOID* ppvObj); DWORD InternalAddRef(); DWORD InternalRelease(); // these versions delegate to m_pOuterUnknown DWORD ExternalQueryInterface(const void*, LPVOID* ppvObj); DWORD ExternalAddRef(); DWORD ExternalRelease(); // implementation helpers LPUNKNOWN GetInterface(const void*); LPUNKNOWN QueryAggregates(const void*); // advanced overrideables for implementation virtual BOOL OnCreateAggregates(); virtual LPUNKNOWN GetInterfaceHook(const void*); // OLE automation implementation public: // OLE event sink implementation BOOL OnEvent(UINT idCtrl, AFX_EVENT* pEvent, AFX_CMDHANDLERINFO* pHandlerInfo); #endif //!_AFX_NO_OLE_SUPPORT };
相关文章推荐
- class 的static成员变量和 static 成员函数
- 【Objective-C Runtime动态加载】---动态创建类Class 动态创建类Class,动态添加Class成员变量与成员函数,动态变量赋值与取值,动态函数调用等方法 a.使用objc_
- CLR中函数引用传递无法使用ref class成员变量的问题
- python3和C++的class的一些差异(成员函数/成员变量)
- MFC CWinApp Class成员变量及成员函数
- UIWidget是所有UI组件的抽象基类,作为基类当然定义了必须的成员变量和函数,接触过MFC或其他UI组件开发,想必都知道有一堆参数设置,尤其是Visual Studio的可视化界面,
- MFC中 新建类与基本类 基本类内成员变量、函数调用
- 在MFC中类内部建立线程处理函数以便调用类的成员函数和变量
- 如何在MFC线程中使用控件的成员变量和函数
- 【MFC学习笔记3】ASSERT()函数用法,CFileFind Class 说明。
- [C++]static全局变量/全局变量,static函数/普通函数,函数中static变量/函数中的变量,类中的static成员变量/普通类成员变量
- 类中只有 成员变量 和 一个成员函数表
- 继:VC中利用CCmdTarget进行的成员函数回调
- 跨线程调用MFC成员函数
- MFC中的m_hWnd成员变量
- Get/Set函数和public成员变量
- Get/Set函数和public成员变量
- otcl 成员变量和成员函数的定义
- MFC界面包装类-多线程时成员函数调用的断言失败
- 关于vc6 在mfc ClassWizard中无法添加成员变量