summaryrefslogtreecommitdiff
path: root/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'extensions')
-rw-r--r--extensions/test/ole/MfcControl/MfcControl.cpp79
-rw-r--r--extensions/test/ole/MfcControl/MfcControl.def9
-rw-r--r--extensions/test/ole/MfcControl/MfcControl.dsp264
-rw-r--r--extensions/test/ole/MfcControl/MfcControl.h33
-rw-r--r--extensions/test/ole/MfcControl/MfcControl.odl82
-rw-r--r--extensions/test/ole/MfcControl/MfcControl.rc145
-rw-r--r--extensions/test/ole/MfcControl/MfcControlCtl.cpp338
-rw-r--r--extensions/test/ole/MfcControl/MfcControlCtl.h96
-rw-r--r--extensions/test/ole/MfcControl/MfcControlPpg.cpp76
-rw-r--r--extensions/test/ole/MfcControl/MfcControlPpg.h46
-rw-r--r--extensions/test/ole/MfcControl/Resource.h20
-rw-r--r--extensions/test/ole/MfcControl/StdAfx.cpp5
-rw-r--r--extensions/test/ole/MfcControl/StdAfx.h30
13 files changed, 1223 insertions, 0 deletions
diff --git a/extensions/test/ole/MfcControl/MfcControl.cpp b/extensions/test/ole/MfcControl/MfcControl.cpp
new file mode 100644
index 000000000000..e82c356fa77b
--- /dev/null
+++ b/extensions/test/ole/MfcControl/MfcControl.cpp
@@ -0,0 +1,79 @@
+// MfcControl.cpp : Implementation of CMfcControlApp and DLL registration.
+
+#include "stdafx.h"
+#include "MfcControl.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+
+CMfcControlApp NEAR theApp;
+
+const GUID CDECL BASED_CODE _tlid =
+ { 0xac221fb3, 0xa0d8, 0x11d4, { 0x83, 0x3b, 0, 0x50, 0x4, 0x52, 0x6a, 0xb4 } };
+const WORD _wVerMajor = 1;
+const WORD _wVerMinor = 0;
+
+
+////////////////////////////////////////////////////////////////////////////
+// CMfcControlApp::InitInstance - DLL initialization
+
+BOOL CMfcControlApp::InitInstance()
+{
+ BOOL bInit = COleControlModule::InitInstance();
+
+ if (bInit)
+ {
+ // TODO: Add your own module initialization code here.
+ }
+
+ return bInit;
+}
+
+
+////////////////////////////////////////////////////////////////////////////
+// CMfcControlApp::ExitInstance - DLL termination
+
+int CMfcControlApp::ExitInstance()
+{
+ // TODO: Add your own module termination code here.
+
+ return COleControlModule::ExitInstance();
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+// DllRegisterServer - Adds entries to the system registry
+
+STDAPI DllRegisterServer(void)
+{
+ AFX_MANAGE_STATE(_afxModuleAddrThis);
+
+ if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
+ return ResultFromScode(SELFREG_E_TYPELIB);
+
+ if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
+ return ResultFromScode(SELFREG_E_CLASS);
+
+ return NOERROR;
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+// DllUnregisterServer - Removes entries from the system registry
+
+STDAPI DllUnregisterServer(void)
+{
+ AFX_MANAGE_STATE(_afxModuleAddrThis);
+
+ if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))
+ return ResultFromScode(SELFREG_E_TYPELIB);
+
+ if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
+ return ResultFromScode(SELFREG_E_CLASS);
+
+ return NOERROR;
+}
diff --git a/extensions/test/ole/MfcControl/MfcControl.def b/extensions/test/ole/MfcControl/MfcControl.def
new file mode 100644
index 000000000000..86cc2a0f8c47
--- /dev/null
+++ b/extensions/test/ole/MfcControl/MfcControl.def
@@ -0,0 +1,9 @@
+; MfcControl.def : Declares the module parameters.
+
+LIBRARY "MFCCONTROL.OCX"
+
+EXPORTS
+ DllCanUnloadNow @1 PRIVATE
+ DllGetClassObject @2 PRIVATE
+ DllRegisterServer @3 PRIVATE
+ DllUnregisterServer @4 PRIVATE
diff --git a/extensions/test/ole/MfcControl/MfcControl.dsp b/extensions/test/ole/MfcControl/MfcControl.dsp
new file mode 100644
index 000000000000..191f7ea1bace
--- /dev/null
+++ b/extensions/test/ole/MfcControl/MfcControl.dsp
@@ -0,0 +1,264 @@
+# Microsoft Developer Studio Project File - Name="MfcControl" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=MfcControl - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "MfcControl.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "MfcControl.mak" CFG="MfcControl - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "MfcControl - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "MfcControl - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "MfcControl - Win32 Unicode Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "MfcControl - Win32 Unicode Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "MfcControl - Win32 Release"
+
+# PROP BASE Use_MFC 2
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Ext "ocx"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 2
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Ext "ocx"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /D "_USRDLL" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
+# ADD RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 /nologo /subsystem:windows /dll /machine:I386
+# Begin Custom Build - Registering ActiveX Control...
+OutDir=.\Release
+TargetPath=.\Release\MfcControl.ocx
+InputPath=.\Release\MfcControl.ocx
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ regsvr32 /s /c "$(TargetPath)"
+ echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "MfcControl - Win32 Debug"
+
+# PROP BASE Use_MFC 2
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Ext "ocx"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 2
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Ext "ocx"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /D "_USRDLL" /FR /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
+# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# Begin Custom Build - Registering ActiveX Control...
+OutDir=.\Debug
+TargetPath=.\Debug\MfcControl.ocx
+InputPath=.\Debug\MfcControl.ocx
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ regsvr32 /s /c "$(TargetPath)"
+ echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "MfcControl - Win32 Unicode Debug"
+
+# PROP BASE Use_MFC 2
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "DebugU"
+# PROP BASE Intermediate_Dir "DebugU"
+# PROP BASE Target_Ext "ocx"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 2
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DebugU"
+# PROP Intermediate_Dir "DebugU"
+# PROP Target_Ext "ocx"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /D "_USRDLL" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_USRDLL" /D "_UNICODE" /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
+# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# Begin Custom Build - Registering ActiveX Control...
+OutDir=.\DebugU
+TargetPath=.\DebugU\MfcControl.ocx
+InputPath=.\DebugU\MfcControl.ocx
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ regsvr32 /s /c "$(TargetPath)"
+ echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "MfcControl - Win32 Unicode Release"
+
+# PROP BASE Use_MFC 2
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "ReleaseU"
+# PROP BASE Intermediate_Dir "ReleaseU"
+# PROP BASE Target_Ext "ocx"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 2
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseU"
+# PROP Intermediate_Dir "ReleaseU"
+# PROP Target_Ext "ocx"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /D "_USRDLL" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_USRDLL" /D "_UNICODE" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
+# ADD RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 /nologo /subsystem:windows /dll /machine:I386
+# Begin Custom Build - Registering ActiveX Control...
+OutDir=.\ReleaseU
+TargetPath=.\ReleaseU\MfcControl.ocx
+InputPath=.\ReleaseU\MfcControl.ocx
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ regsvr32 /s /c "$(TargetPath)"
+ echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+
+# End Custom Build
+
+!ENDIF
+
+# Begin Target
+
+# Name "MfcControl - Win32 Release"
+# Name "MfcControl - Win32 Debug"
+# Name "MfcControl - Win32 Unicode Debug"
+# Name "MfcControl - Win32 Unicode Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\MfcControl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\MfcControl.def
+# End Source File
+# Begin Source File
+
+SOURCE=.\MfcControl.odl
+# End Source File
+# Begin Source File
+
+SOURCE=.\MfcControl.rc
+# End Source File
+# Begin Source File
+
+SOURCE=.\MfcControlCtl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\MfcControlPpg.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\MfcControl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\MfcControlCtl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\MfcControlPpg.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\MfcControlCtl.bmp
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# End Target
+# End Project
diff --git a/extensions/test/ole/MfcControl/MfcControl.h b/extensions/test/ole/MfcControl/MfcControl.h
new file mode 100644
index 000000000000..a2877f135f2e
--- /dev/null
+++ b/extensions/test/ole/MfcControl/MfcControl.h
@@ -0,0 +1,33 @@
+#if !defined(AFX_MFCCONTROL_H__AC221FBC_A0D8_11D4_833B_005004526AB4__INCLUDED_)
+#define AFX_MFCCONTROL_H__AC221FBC_A0D8_11D4_833B_005004526AB4__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+// MfcControl.h : main header file for MFCCONTROL.DLL
+
+#if !defined( __AFXCTL_H__ )
+ #error include 'afxctl.h' before including this file
+#endif
+
+#include "resource.h" // main symbols
+
+/////////////////////////////////////////////////////////////////////////////
+// CMfcControlApp : See MfcControl.cpp for implementation.
+
+class CMfcControlApp : public COleControlModule
+{
+public:
+ BOOL InitInstance();
+ int ExitInstance();
+};
+
+extern const GUID CDECL _tlid;
+extern const WORD _wVerMajor;
+extern const WORD _wVerMinor;
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_MFCCONTROL_H__AC221FBC_A0D8_11D4_833B_005004526AB4__INCLUDED)
diff --git a/extensions/test/ole/MfcControl/MfcControl.odl b/extensions/test/ole/MfcControl/MfcControl.odl
new file mode 100644
index 000000000000..f00ebe518179
--- /dev/null
+++ b/extensions/test/ole/MfcControl/MfcControl.odl
@@ -0,0 +1,82 @@
+// MfcControl.odl : type library source for ActiveX Control project.
+
+// This file will be processed by the Make Type Library (mktyplib) tool to
+// produce the type library (MfcControl.tlb) that will become a resource in
+// MfcControl.ocx.
+
+#include <olectl.h>
+#include <idispids.h>
+
+[ uuid(AC221FB3-A0D8-11D4-833B-005004526AB4), version(1.0),
+ helpfile("MfcControl.hlp"),
+ helpstring("MfcControl ActiveX Control module"),
+ control ]
+library MFCCONTROLLib
+{
+ importlib(STDOLE_TLB);
+ importlib(STDTYPE_TLB);
+
+ // Primary dispatch interface for CMfcControlCtrl
+
+ [ uuid(AC221FB4-A0D8-11D4-833B-005004526AB4),
+ helpstring("Dispatch interface for MfcControl Control"), hidden ]
+ dispinterface _DMfcControl
+ {
+ properties:
+ // NOTE - ClassWizard will maintain property information here.
+ // Use extreme caution when editing this section.
+ //{{AFX_ODL_PROP(CMfcControlCtrl)
+ //}}AFX_ODL_PROP
+
+ methods:
+ // NOTE - ClassWizard will maintain method information here.
+ // Use extreme caution when editing this section.
+ //{{AFX_ODL_METHOD(CMfcControlCtrl)
+ [id(1)] short inShort(short val);
+ [id(2)] long inLong(long val);
+ [id(3)] BSTR inString(BSTR* val);
+ [id(4)] float inFloat(float val);
+ [id(5)] double inDouble(double val);
+ [id(6)] VARIANT inVariant(VARIANT val);
+ [id(7)] IDispatch* inObject(IDispatch* val);
+ [id(8)] void outShort([out] short* val);
+ [id(9)] void outLong([out] long* val);
+ [id(10)] void outString([out] BSTR* val);
+ [id(11)] void outFloat([out] float* val);
+ [id(12)] void outDouble([out] double* val);
+ [id(13)] void outVariant([out] VARIANT* val);
+ [id(14)] void outObject([out] IDispatch** val);
+ //}}AFX_ODL_METHOD
+ };
+
+ // Event dispatch interface for CMfcControlCtrl
+
+ [ uuid(AC221FB5-A0D8-11D4-833B-005004526AB4),
+ helpstring("Event interface for MfcControl Control") ]
+ dispinterface _DMfcControlEvents
+ {
+ properties:
+ // Event interface has no properties
+
+ methods:
+ // NOTE - ClassWizard will maintain event information here.
+ // Use extreme caution when editing this section.
+ //{{AFX_ODL_EVENT(CMfcControlCtrl)
+ //}}AFX_ODL_EVENT
+ };
+
+ // Class information for CMfcControlCtrl
+
+ [ uuid(AC221FB6-A0D8-11D4-833B-005004526AB4),
+ helpstring("MfcControl Control"), control ]
+ coclass MfcControl
+ {
+ [default] dispinterface _DMfcControl;
+ [default, source] dispinterface _DMfcControlEvents;
+ };
+
+
+ //{{AFX_APPEND_ODL}}
+ //}}AFX_APPEND_ODL}}
+};
+//VT_I2
diff --git a/extensions/test/ole/MfcControl/MfcControl.rc b/extensions/test/ole/MfcControl/MfcControl.rc
new file mode 100644
index 000000000000..ce8375871fbc
--- /dev/null
+++ b/extensions/test/ole/MfcControl/MfcControl.rc
@@ -0,0 +1,145 @@
+//Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "1 TYPELIB ""MfcControl.tlb""\r\n"
+ "\0"
+END
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,1
+ PRODUCTVERSION 1,0,0,1
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904B0"
+ BEGIN
+ VALUE "CompanyName", "Star Office Entwicklungs GmbH\0"
+ VALUE "FileDescription", "MfcControl ActiveX Control Module\0"
+ VALUE "FileVersion", "1, 0, 0, 1\0"
+ VALUE "InternalName", "MfcControl\0"
+ VALUE "LegalCopyright", "Copyright (C) 2000\0"
+ VALUE "LegalTrademarks", "\0"
+ VALUE "OriginalFilename", "MfcControl.OCX\0"
+ VALUE "ProductName", "MfcControl ActiveX Control Module\0"
+ VALUE "ProductVersion", "1, 0, 0, 1\0"
+ VALUE "OLESelfRegister", "\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDB_MFCCONTROL BITMAP DISCARDABLE "MfcControlCtl.bmp"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+
+IDD_PROPPAGE_MFCCONTROL DIALOG DISCARDABLE 0, 0, 250, 62
+STYLE WS_CHILD
+FONT 8, "MS Sans Serif"
+BEGIN
+ LTEXT "TODO: Place controls to manipulate properties of MfcControl Control on this dialog.",
+ IDC_STATIC,7,25,229,16
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO DISCARDABLE
+BEGIN
+ IDD_PROPPAGE_MFCCONTROL, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 243
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 55
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_MFCCONTROL "MfcControl Control"
+ IDS_MFCCONTROL_PPG "MfcControl Property Page"
+ IDS_MFCCONTROL_PPG_CAPTION "General"
+
+END
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+1 TYPELIB "MfcControl.tlb"
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/extensions/test/ole/MfcControl/MfcControlCtl.cpp b/extensions/test/ole/MfcControl/MfcControlCtl.cpp
new file mode 100644
index 000000000000..53690fc80ed1
--- /dev/null
+++ b/extensions/test/ole/MfcControl/MfcControlCtl.cpp
@@ -0,0 +1,338 @@
+// MfcControlCtl.cpp : Implementation of the CMfcControlCtrl ActiveX Control class.
+
+#include "stdafx.h"
+#include "MfcControl.h"
+#include "MfcControlCtl.h"
+#include "MfcControlPpg.h"
+
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+
+IMPLEMENT_DYNCREATE(CMfcControlCtrl, COleControl)
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Message map
+
+BEGIN_MESSAGE_MAP(CMfcControlCtrl, COleControl)
+ //{{AFX_MSG_MAP(CMfcControlCtrl)
+ // NOTE - ClassWizard will add and remove message map entries
+ // DO NOT EDIT what you see in these blocks of generated code !
+ //}}AFX_MSG_MAP
+ ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
+END_MESSAGE_MAP()
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Dispatch map
+
+BEGIN_DISPATCH_MAP(CMfcControlCtrl, COleControl)
+ //{{AFX_DISPATCH_MAP(CMfcControlCtrl)
+ DISP_FUNCTION(CMfcControlCtrl, "inShort", inShort, VT_I2, VTS_I2)
+ DISP_FUNCTION(CMfcControlCtrl, "inLong", inLong, VT_I4, VTS_I4)
+ DISP_FUNCTION(CMfcControlCtrl, "inString", inString, VT_BSTR, VTS_PBSTR)
+ DISP_FUNCTION(CMfcControlCtrl, "inFloat", inFloat, VT_R4, VTS_R4)
+ DISP_FUNCTION(CMfcControlCtrl, "inDouble", inDouble, VT_R8, VTS_R8)
+ DISP_FUNCTION(CMfcControlCtrl, "inVariant", inVariant, VT_VARIANT, VTS_VARIANT)
+ DISP_FUNCTION(CMfcControlCtrl, "inObject", inObject, VT_DISPATCH, VTS_DISPATCH)
+ DISP_FUNCTION(CMfcControlCtrl, "outShort", outShort, VT_EMPTY, VTS_I2)
+ DISP_FUNCTION(CMfcControlCtrl, "outLong", outLong, VT_EMPTY, VTS_I4)
+ DISP_FUNCTION(CMfcControlCtrl, "outString", outString, VT_EMPTY, VTS_PBSTR)
+ DISP_FUNCTION(CMfcControlCtrl, "outFloat", outFloat, VT_EMPTY, VTS_R4)
+ DISP_FUNCTION(CMfcControlCtrl, "outDouble", outDouble, VT_EMPTY, VTS_R8)
+ DISP_FUNCTION(CMfcControlCtrl, "outVariant", outVariant, VT_EMPTY, VTS_PVARIANT)
+ DISP_FUNCTION(CMfcControlCtrl, "outObject", outObject, VT_EMPTY, VTS_PDISPATCH)
+ //}}AFX_DISPATCH_MAP
+END_DISPATCH_MAP()
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Event map
+
+BEGIN_EVENT_MAP(CMfcControlCtrl, COleControl)
+ //{{AFX_EVENT_MAP(CMfcControlCtrl)
+ // NOTE - ClassWizard will add and remove event map entries
+ // DO NOT EDIT what you see in these blocks of generated code !
+ //}}AFX_EVENT_MAP
+END_EVENT_MAP()
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Property pages
+
+// TODO: Add more property pages as needed. Remember to increase the count!
+BEGIN_PROPPAGEIDS(CMfcControlCtrl, 1)
+ PROPPAGEID(CMfcControlPropPage::guid)
+END_PROPPAGEIDS(CMfcControlCtrl)
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Initialize class factory and guid
+
+IMPLEMENT_OLECREATE_EX(CMfcControlCtrl, "MFCCONTROL.MfcControlCtrl.1",
+ 0xac221fb6, 0xa0d8, 0x11d4, 0x83, 0x3b, 0, 0x50, 0x4, 0x52, 0x6a, 0xb4)
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Type library ID and version
+
+IMPLEMENT_OLETYPELIB(CMfcControlCtrl, _tlid, _wVerMajor, _wVerMinor)
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Interface IDs
+
+const IID BASED_CODE IID_DMfcControl =
+ { 0xac221fb4, 0xa0d8, 0x11d4, { 0x83, 0x3b, 0, 0x50, 0x4, 0x52, 0x6a, 0xb4 } };
+const IID BASED_CODE IID_DMfcControlEvents =
+ { 0xac221fb5, 0xa0d8, 0x11d4, { 0x83, 0x3b, 0, 0x50, 0x4, 0x52, 0x6a, 0xb4 } };
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Control type information
+
+static const DWORD BASED_CODE _dwMfcControlOleMisc =
+ OLEMISC_ACTIVATEWHENVISIBLE |
+ OLEMISC_SETCLIENTSITEFIRST |
+ OLEMISC_INSIDEOUT |
+ OLEMISC_CANTLINKINSIDE |
+ OLEMISC_RECOMPOSEONRESIZE;
+
+IMPLEMENT_OLECTLTYPE(CMfcControlCtrl, IDS_MFCCONTROL, _dwMfcControlOleMisc)
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CMfcControlCtrl::CMfcControlCtrlFactory::UpdateRegistry -
+// Adds or removes system registry entries for CMfcControlCtrl
+
+BOOL CMfcControlCtrl::CMfcControlCtrlFactory::UpdateRegistry(BOOL bRegister)
+{
+ // TODO: Verify that your control follows apartment-model threading rules.
+ // Refer to MFC TechNote 64 for more information.
+ // If your control does not conform to the apartment-model rules, then
+ // you must modify the code below, changing the 6th parameter from
+ // afxRegApartmentThreading to 0.
+
+ if (bRegister)
+ return AfxOleRegisterControlClass(
+ AfxGetInstanceHandle(),
+ m_clsid,
+ m_lpszProgID,
+ IDS_MFCCONTROL,
+ IDB_MFCCONTROL,
+ afxRegApartmentThreading,
+ _dwMfcControlOleMisc,
+ _tlid,
+ _wVerMajor,
+ _wVerMinor);
+ else
+ return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CMfcControlCtrl::CMfcControlCtrl - Constructor
+
+CMfcControlCtrl::CMfcControlCtrl()
+{
+ InitializeIIDs(&IID_DMfcControl, &IID_DMfcControlEvents);
+
+ // TODO: Initialize your control's instance data here.
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CMfcControlCtrl::~CMfcControlCtrl - Destructor
+
+CMfcControlCtrl::~CMfcControlCtrl()
+{
+ // TODO: Cleanup your control's instance data here.
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CMfcControlCtrl::OnDraw - Drawing function
+
+void CMfcControlCtrl::OnDraw(
+ CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
+{
+ // TODO: Replace the following code with your own drawing code.
+ pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
+ pdc->Ellipse(rcBounds);
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CMfcControlCtrl::DoPropExchange - Persistence support
+
+void CMfcControlCtrl::DoPropExchange(CPropExchange* pPX)
+{
+ ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
+ COleControl::DoPropExchange(pPX);
+
+ // TODO: Call PX_ functions for each persistent custom property.
+
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CMfcControlCtrl::OnResetState - Reset control to default state
+
+void CMfcControlCtrl::OnResetState()
+{
+ COleControl::OnResetState(); // Resets defaults found in DoPropExchange
+
+ // TODO: Reset any other control state here.
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CMfcControlCtrl message handlers
+
+
+short CMfcControlCtrl::inShort(short val)
+{
+ char buf[256];
+ sprintf( buf, "inByte: value= %d", val);
+ ::MessageBoxA( NULL, buf, "MFCCONTROL.MfcControl", MB_OK);
+ return val+1;
+}
+
+long CMfcControlCtrl::inLong(long val)
+{
+ char buf[256];
+ sprintf( buf, "inLong: value= %d", val);
+ ::MessageBoxA( NULL, buf, "MFCCONTROL.MfcControl", MB_OK);
+ return val+1;
+}
+
+BSTR CMfcControlCtrl::inString(BSTR* val)
+{
+ CString strResult;
+ strResult= *val;
+ char buf[256];
+ sprintf( buf, "inString: value= %S", *val);
+ ::MessageBoxA( NULL, buf, "MFCCONTROL.MfcControl", MB_OK);
+ strResult += L" an appended string";
+ return strResult.AllocSysString();
+}
+
+float CMfcControlCtrl::inFloat(float val)
+{
+ char buf[256];
+ sprintf( buf, "inFloat: value= %f", val);
+ ::MessageBoxA( NULL, buf, "MFCCONTROL.MfcControl", MB_OK);
+ return val+1;
+}
+
+double CMfcControlCtrl::inDouble(double val)
+{
+ char buf[256];
+ sprintf( buf, "inDouble: value= %g", val);
+ ::MessageBoxA( NULL, buf, "MFCCONTROL.MfcControl", MB_OK);
+ return val+1;
+}
+
+VARIANT CMfcControlCtrl::inVariant(const VARIANT FAR& val)
+{
+ VARIANT vaResult;
+ VariantInit(&vaResult);
+ VariantCopyInd( &vaResult, const_cast<VARIANT*>(&val));
+ if( vaResult.vt == VT_BSTR)
+ {
+ char buf[256];
+ sprintf( buf, "inVariant: value= %S", vaResult.bstrVal);
+ ::MessageBoxA( NULL, buf, "MFCCONTROL.MfcControl", MB_OK);
+
+ }
+ return _variant_t( L" a string from CMfcControlCtrl::inVariant");
+}
+
+LPDISPATCH CMfcControlCtrl::inObject(LPDISPATCH val)
+{
+ char buf[256];
+ _bstr_t bstr;
+ HRESULT hr= S_OK;
+ COleVariant var;
+ DISPID id;
+ OLECHAR* name=L"prpString";
+ if( SUCCEEDED(hr= val->GetIDsOfNames( IID_NULL, &name, 1, LOCALE_USER_DEFAULT, &id)))
+ {
+ DISPPARAMS params={0,0,0,0};
+ hr= val->Invoke( id, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &params, &var,0,0);
+
+ }
+
+ if( var.vt== VT_BSTR)
+ bstr= var.bstrVal;
+ sprintf( buf, "inObject: value= %S", (wchar_t*)bstr);
+ ::MessageBoxA( NULL, buf, "MFCCONTROL.MfcControl", MB_OK);
+
+ return NULL;
+}
+
+
+void CMfcControlCtrl::outShort(short* val)
+{
+ *val= 123;
+}
+
+void CMfcControlCtrl::outLong(long* val)
+{
+ *val= 1234;
+}
+
+void CMfcControlCtrl::outString(BSTR FAR* val)
+{
+ *val= SysAllocString(L"A string from CMfcControlCtrl::outString ");
+}
+
+void CMfcControlCtrl::outFloat(float* val)
+{
+ *val= 3.14f;
+}
+
+void CMfcControlCtrl::outDouble(double* val)
+{
+ *val= 3.145;
+}
+
+void CMfcControlCtrl::outVariant(VARIANT FAR* val)
+{
+ val= (VARIANT*)CoTaskMemAlloc( sizeof( VARIANT));
+}
+
+void CMfcControlCtrl::outObject(LPDISPATCH FAR* val)
+{
+ //{BFE10EBE-8584-11D4-005004526AB4}
+ CLSID clsTestControl={0xBFE10EBE,0x8584,0x11D4, { 0x00,0x50,0x04,0x52,0x6A,0xB4}};
+ IDispatch* pDisp= NULL;
+ HRESULT hr= CoCreateInstance( clsTestControl, NULL, CLSCTX_ALL, __uuidof(IDispatch), (void**)&pDisp);
+
+ if( SUCCEEDED( hr) && val)
+ {
+ COleVariant var;
+ DISPID id;
+ OLECHAR* name=L"prpString";
+ if( SUCCEEDED(hr= pDisp->GetIDsOfNames( IID_NULL, &name, 1, LOCALE_USER_DEFAULT, &id)))
+ {
+ COleVariant vaParam1(_T("this is property prpString of AxTestComponents.Basic"));
+ DISPID dispidPut= DISPID_PROPERTYPUT;
+ DISPPARAMS params;
+ params.cArgs= 1;
+ params.cNamedArgs= 1;
+ params.rgdispidNamedArgs= &dispidPut;
+ params.rgvarg= &vaParam1;
+
+ hr= pDisp->Invoke( id, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, &params, &var,0,0);
+ *val= pDisp;
+ }
+
+ }
+
+}
diff --git a/extensions/test/ole/MfcControl/MfcControlCtl.h b/extensions/test/ole/MfcControl/MfcControlCtl.h
new file mode 100644
index 000000000000..182793b0ee8d
--- /dev/null
+++ b/extensions/test/ole/MfcControl/MfcControlCtl.h
@@ -0,0 +1,96 @@
+#if !defined(AFX_MFCCONTROLCTL_H__AC221FC3_A0D8_11D4_833B_005004526AB4__INCLUDED_)
+#define AFX_MFCCONTROLCTL_H__AC221FC3_A0D8_11D4_833B_005004526AB4__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+// MfcControlCtl.h : Declaration of the CMfcControlCtrl ActiveX Control class.
+
+/////////////////////////////////////////////////////////////////////////////
+// CMfcControlCtrl : See MfcControlCtl.cpp for implementation.
+
+class CMfcControlCtrl : public COleControl
+{
+ DECLARE_DYNCREATE(CMfcControlCtrl)
+
+// Constructor
+public:
+ CMfcControlCtrl();
+
+// Overrides
+ // ClassWizard generated virtual function overrides
+ //{{AFX_VIRTUAL(CMfcControlCtrl)
+ public:
+ virtual void OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid);
+ virtual void DoPropExchange(CPropExchange* pPX);
+ virtual void OnResetState();
+ //}}AFX_VIRTUAL
+
+// Implementation
+protected:
+ ~CMfcControlCtrl();
+
+ DECLARE_OLECREATE_EX(CMfcControlCtrl) // Class factory and guid
+ DECLARE_OLETYPELIB(CMfcControlCtrl) // GetTypeInfo
+ DECLARE_PROPPAGEIDS(CMfcControlCtrl) // Property page IDs
+ DECLARE_OLECTLTYPE(CMfcControlCtrl) // Type name and misc status
+
+// Message maps
+ //{{AFX_MSG(CMfcControlCtrl)
+ // NOTE - ClassWizard will add and remove member functions here.
+ // DO NOT EDIT what you see in these blocks of generated code !
+ //}}AFX_MSG
+ DECLARE_MESSAGE_MAP()
+
+// Dispatch maps
+ //{{AFX_DISPATCH(CMfcControlCtrl)
+ afx_msg short inShort(short val);
+ afx_msg long inLong(long val);
+ afx_msg BSTR inString(BSTR* val);
+ afx_msg float inFloat(float val);
+ afx_msg double inDouble(double val);
+ afx_msg VARIANT inVariant(const VARIANT FAR& val);
+ afx_msg LPDISPATCH inObject(LPDISPATCH val);
+ afx_msg void outShort(short* val);
+ afx_msg void outLong(long* val);
+ afx_msg void outString(BSTR FAR* val);
+ afx_msg void outFloat(float* val);
+ afx_msg void outDouble(double* val);
+ afx_msg void outVariant(VARIANT FAR* val);
+ afx_msg void outObject(LPDISPATCH FAR* val);
+ //}}AFX_DISPATCH
+ DECLARE_DISPATCH_MAP()
+
+// Event maps
+ //{{AFX_EVENT(CMfcControlCtrl)
+ //}}AFX_EVENT
+ DECLARE_EVENT_MAP()
+
+// Dispatch and event IDs
+public:
+ enum {
+ //{{AFX_DISP_ID(CMfcControlCtrl)
+ dispidInShort = 1L,
+ dispidInLong = 2L,
+ dispidInString = 3L,
+ dispidInFloat = 4L,
+ dispidInDouble = 5L,
+ dispidInVariant = 6L,
+ dispidInObject = 7L,
+ dispidOutShort = 8L,
+ dispidOutLong = 9L,
+ dispidOutString = 10L,
+ dispidOutFloat = 11L,
+ dispidOutDouble = 12L,
+ dispidOutVariant = 13L,
+ dispidOutObject = 14L,
+ //}}AFX_DISP_ID
+ };
+};
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_MFCCONTROLCTL_H__AC221FC3_A0D8_11D4_833B_005004526AB4__INCLUDED)
+// BYTE
diff --git a/extensions/test/ole/MfcControl/MfcControlPpg.cpp b/extensions/test/ole/MfcControl/MfcControlPpg.cpp
new file mode 100644
index 000000000000..5b4ae48d57a9
--- /dev/null
+++ b/extensions/test/ole/MfcControl/MfcControlPpg.cpp
@@ -0,0 +1,76 @@
+// MfcControlPpg.cpp : Implementation of the CMfcControlPropPage property page class.
+
+#include "stdafx.h"
+#include "MfcControl.h"
+#include "MfcControlPpg.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+
+IMPLEMENT_DYNCREATE(CMfcControlPropPage, COlePropertyPage)
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Message map
+
+BEGIN_MESSAGE_MAP(CMfcControlPropPage, COlePropertyPage)
+ //{{AFX_MSG_MAP(CMfcControlPropPage)
+ // NOTE - ClassWizard will add and remove message map entries
+ // DO NOT EDIT what you see in these blocks of generated code !
+ //}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Initialize class factory and guid
+
+IMPLEMENT_OLECREATE_EX(CMfcControlPropPage, "MFCCONTROL.MfcControlPropPage.1",
+ 0xac221fb7, 0xa0d8, 0x11d4, 0x83, 0x3b, 0, 0x50, 0x4, 0x52, 0x6a, 0xb4)
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CMfcControlPropPage::CMfcControlPropPageFactory::UpdateRegistry -
+// Adds or removes system registry entries for CMfcControlPropPage
+
+BOOL CMfcControlPropPage::CMfcControlPropPageFactory::UpdateRegistry(BOOL bRegister)
+{
+ if (bRegister)
+ return AfxOleRegisterPropertyPageClass(AfxGetInstanceHandle(),
+ m_clsid, IDS_MFCCONTROL_PPG);
+ else
+ return AfxOleUnregisterClass(m_clsid, NULL);
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CMfcControlPropPage::CMfcControlPropPage - Constructor
+
+CMfcControlPropPage::CMfcControlPropPage() :
+ COlePropertyPage(IDD, IDS_MFCCONTROL_PPG_CAPTION)
+{
+ //{{AFX_DATA_INIT(CMfcControlPropPage)
+ // NOTE: ClassWizard will add member initialization here
+ // DO NOT EDIT what you see in these blocks of generated code !
+ //}}AFX_DATA_INIT
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CMfcControlPropPage::DoDataExchange - Moves data between page and properties
+
+void CMfcControlPropPage::DoDataExchange(CDataExchange* pDX)
+{
+ //{{AFX_DATA_MAP(CMfcControlPropPage)
+ // NOTE: ClassWizard will add DDP, DDX, and DDV calls here
+ // DO NOT EDIT what you see in these blocks of generated code !
+ //}}AFX_DATA_MAP
+ DDP_PostProcessing(pDX);
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CMfcControlPropPage message handlers
diff --git a/extensions/test/ole/MfcControl/MfcControlPpg.h b/extensions/test/ole/MfcControl/MfcControlPpg.h
new file mode 100644
index 000000000000..abdaa53579f6
--- /dev/null
+++ b/extensions/test/ole/MfcControl/MfcControlPpg.h
@@ -0,0 +1,46 @@
+#if !defined(AFX_MFCCONTROLPPG_H__AC221FC5_A0D8_11D4_833B_005004526AB4__INCLUDED_)
+#define AFX_MFCCONTROLPPG_H__AC221FC5_A0D8_11D4_833B_005004526AB4__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+// MfcControlPpg.h : Declaration of the CMfcControlPropPage property page class.
+
+////////////////////////////////////////////////////////////////////////////
+// CMfcControlPropPage : See MfcControlPpg.cpp.cpp for implementation.
+
+class CMfcControlPropPage : public COlePropertyPage
+{
+ DECLARE_DYNCREATE(CMfcControlPropPage)
+ DECLARE_OLECREATE_EX(CMfcControlPropPage)
+
+// Constructor
+public:
+ CMfcControlPropPage();
+
+// Dialog Data
+ //{{AFX_DATA(CMfcControlPropPage)
+ enum { IDD = IDD_PROPPAGE_MFCCONTROL };
+ // NOTE - ClassWizard will add data members here.
+ // DO NOT EDIT what you see in these blocks of generated code !
+ //}}AFX_DATA
+
+// Implementation
+protected:
+ virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
+
+// Message maps
+protected:
+ //{{AFX_MSG(CMfcControlPropPage)
+ // NOTE - ClassWizard will add and remove member functions here.
+ // DO NOT EDIT what you see in these blocks of generated code !
+ //}}AFX_MSG
+ DECLARE_MESSAGE_MAP()
+
+};
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_MFCCONTROLPPG_H__AC221FC5_A0D8_11D4_833B_005004526AB4__INCLUDED)
diff --git a/extensions/test/ole/MfcControl/Resource.h b/extensions/test/ole/MfcControl/Resource.h
new file mode 100644
index 000000000000..02eeceee6a95
--- /dev/null
+++ b/extensions/test/ole/MfcControl/Resource.h
@@ -0,0 +1,20 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by MfcControl.rc
+//
+
+#define IDS_MFCCONTROL 1
+#define IDS_MFCCONTROL_PPG 2
+
+#define IDS_MFCCONTROL_PPG_CAPTION 200
+
+#define IDD_PROPPAGE_MFCCONTROL 200
+
+
+#define IDB_MFCCONTROL 1
+
+
+#define _APS_NEXT_RESOURCE_VALUE 201
+#define _APS_NEXT_CONTROL_VALUE 201
+#define _APS_NEXT_SYMED_VALUE 101
+#define _APS_NEXT_COMMAND_VALUE 32768
diff --git a/extensions/test/ole/MfcControl/StdAfx.cpp b/extensions/test/ole/MfcControl/StdAfx.cpp
new file mode 100644
index 000000000000..07f7b469ee43
--- /dev/null
+++ b/extensions/test/ole/MfcControl/StdAfx.cpp
@@ -0,0 +1,5 @@
+// stdafx.cpp : source file that includes just the standard includes
+// stdafx.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
diff --git a/extensions/test/ole/MfcControl/StdAfx.h b/extensions/test/ole/MfcControl/StdAfx.h
new file mode 100644
index 000000000000..51a41fb7a98c
--- /dev/null
+++ b/extensions/test/ole/MfcControl/StdAfx.h
@@ -0,0 +1,30 @@
+#if !defined(AFX_STDAFX_H__AC221FBA_A0D8_11D4_833B_005004526AB4__INCLUDED_)
+#define AFX_STDAFX_H__AC221FBA_A0D8_11D4_833B_005004526AB4__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently,
+// but are changed infrequently
+
+#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
+
+#include <afxctl.h> // MFC support for ActiveX Controls
+#include <afxext.h> // MFC extensions
+#include <afxdtctl.h> // MFC support for Internet Explorer 4 Comon Controls
+#ifndef _AFX_NO_AFXCMN_SUPPORT
+#include <afxcmn.h> // MFC support for Windows Common Controls
+#endif // _AFX_NO_AFXCMN_SUPPORT
+
+// Delete the two includes below if you do not wish to use the MFC
+// database classes
+#include <afxdb.h> // MFC database classes
+#include <afxdao.h> // MFC DAO database classes
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#include <comdef.h>
+#endif // !defined(AFX_STDAFX_H__AC221FBA_A0D8_11D4_833B_005004526AB4__INCLUDED_)