WTLATLVisual C++ 7.1Visual C++ 8.0Visual C++ 7.0Visual Studio .NET 2003Windows 2003Windows 2000Visual C++ 6.0Windows XP中级开发Visual StudioWindowsC++
将 WTL MDI 窗口添加到 ATL 控件






4.77/5 (10投票s)
2003年9月12日
1分钟阅读

70223

1621
本文将展示如何通过一个实际示例将 WTL MDI 窗口嵌入到 ATL 控件中。
引言
本文将介绍如何轻松地将 WTL MDI 窗口添加到 ATL 控件中。
背景
我发现没有关于使用 ATL/WTL 在 ActiveX 中使用 MDI 的文章。在 VS.NET 中,我也找不到它的向导,所以我决定与大家分享我在 ActiveX 中使用 MDI 的想法。
操作步骤
步骤 1
创建 ATL 控件项目 - MdiControl 并创建MdiEx
控件第二步
创建 WTL MDI 应用程序 - MdiControlMdiWnd
步骤 3
将 MdiControlMdiWnd
res 文件夹和您想要的文件复制到 MdiControl
文件夹
步骤 4
将 MdiControlMdiWnd
的 MdiControlMdiWnd.rc 和 Resource.h 添加到 MdiControl 文件夹
步骤 5
将我的类 Yf_Control.h, YF_Module.cpp 和 YF_Module.h 复制到 MdiControl 文件夹
步骤 6
打开 MdiControl 项目并将您复制的所有文件添加到 MdiControl 文件夹
步骤 7
打开 stdafx.h 并根据以下内容进行修改。
//#define _ATL_NO_AUTOMATIC_NAMESPACE ... #include "resource.h" #include <atlbase.h> //... // if you use VC7 //------------------------------------- #include "YF_Module.h" //------------------------------------- //.... #include <atlcom.h> #include <atlhost.h> #include <atlwin.h> #include <atlctl.h> #include <atlapp.h> #include <atlframe.h> #include <atlctrls.h> #include <atlctrlw.h> #include <mshtml.h> #include <exdisp.h> #include <shlguid.h> ...
步骤 8
打开 MdiControl.cpp 并根据以下内容进行修改。
... /* class CMdiControlModule : public CAtlDllModuleT< CMdiControlModule > { public : DECLARE_LIBID(LIBID_MdiControlLib) DECLARE_REGISTRY_APPID_RESOURCEID(IDR_MDICONTROL, "{DA155D37-087A-4865-BD60-A88A95F21C4B}") }; CMdiControlModule _AtlModule; */ YF_DECLARE_LIBID(LIBID_MdiControlLib) YF_DECLARE_REGISTRY_APPID_RESOURCEID(IDR_MDICONTROL, "{DA155D37-087A-4865-BD60-A88A95F21C4B}") #define _AtlModule _Module ...
步骤 9
打开 MdiEx.h 并根据以下内容进行修改。
...
#include "YF_Control.h"
...
class ATL_NO_VTABLE CMdiEx : ... public IOleObjectImpl_YF<CMdiEx>, ... public CComControl_YF<CMdiEx>, ... ... CMdiEx() { m_bWindowOnly = TRUE; } ... BEGIN_MSG_MAP(CMdiEx) ... CHAIN_MSG_MAP(CComControl_YF<CMdiEx>) ... END_MSG_MAP() ..... STDMETHOD(TranslateAccelerator)(LPMSG pMsg) { CComControl_YF<CMdiEx>::PreTranslateMessage(pMsg); return S_OK; } ...
第 10 步
创建 MdiEx
事件接口
[id(1), helpstring("method OnClose")] HRESULT OnClose(void);
第 11 步
打开 MainFrm.h 并在 OnCreate
方法中根据以下内容进行修改。
..... // register object for message filtering and idle updates //CMessageLoop* pLoop = _Module.GetMessageLoop(); //ATLASSERT(pLoop != NULL); //pLoop->AddMessageFilter(this); //pLoop->AddIdleHandler(this); ....
完成!您已经拥有一个带有 MDI 的 ActiveX,可以在 IE 中显示。