Introduction
The acticle will tell you how to easily add a WTL MDI window into an ATL Control.
Background
I found that there are no articles about MDI in ActiveX using ATL/WTL. In VS.NET , I also could not find a Wizard for it, so I decided to share my idea about MDI in ActiveX with you.
How to Do it
Step 1
Create ATL Control Project - MdiControl and Create
MdiEx
Control
Step 2
Create WTL MDI Application - MdiControlMdiWnd
Step 3
Copy MdiControlMdiWnd
res folder and the files what you want to MdiControl
folder
Step 4
Add MdiControlMdiWnd.rc and Resource.h of MdiControlMdiWnd
into the MdiControl folder
Step 5
Copy my classes Yf_Control.h, YF_Module.cpp and YF_Module.h into MdiControl folder
Step 6
Open MdiControl project and add all of files that you copied into MdiControl folder
Step 7
Open stdafx.h and modify based on the following.
...
#include "resource.h"
#include <atlbase.h>
#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>
...
Step 8
Open MdiControl.cpp and modify based on the following.
...
YF_DECLARE_LIBID(LIBID_MdiControlLib)
YF_DECLARE_REGISTRY_APPID_RESOURCEID(IDR_MDICONTROL,
"{DA155D37-087A-4865-BD60-A88A95F21C4B}")
#define _AtlModule _Module
...
Step 9
Open MdiEx.h and modify based on the following.
...
#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;
}
...
Step 10
Create MdiEx
Event Interface
[id(1), helpstring("method OnClose")] HRESULT OnClose(void);
Step 11
Open MainFrm.h and modify based on the following in OnCreate
Method.
.....
....
Done! You had an ActiveX with MDI, that can be shown in IE.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.