Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
124 lines
3.0 KiB
C++
124 lines
3.0 KiB
C++
[!if=(FreeThreadedMarshaler, "TRUE")]
|
|
[!set(NeedsGetControllingUnknown, "TRUE")]
|
|
[!endif]
|
|
// [!HeaderName] : Declaration of the [!ClassName]
|
|
[!crlf]
|
|
|
|
[!if=(FileExists, "FALSE")]
|
|
#ifndef __[!UpperShortName]_H_
|
|
#define __[!UpperShortName]_H_
|
|
[!crlf]
|
|
#include "resource.h" // main symbols
|
|
[!else]
|
|
[!AddIncludeFile(TargetFile, "resource.h")]
|
|
[!endif]
|
|
|
|
[!crlf]
|
|
EXTERN_C const CLSID CLSID_[!CoClassName];
|
|
[!crlf]
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// [!ClassName]
|
|
|
|
class ATL_NO_VTABLE [!ClassName] :
|
|
[!if=(ThreadingModel, "Single")]
|
|
public CComObjectRootEx<CComSingleThreadModel>,
|
|
[!endif]
|
|
[!if=(ThreadingModel, "Apartment")]
|
|
public CComObjectRootEx<CComSingleThreadModel>,
|
|
[!endif]
|
|
[!if=(ThreadingModel, "Both")]
|
|
public CComObjectRootEx<CComMultiThreadModel>,
|
|
[!endif]
|
|
[!if=(ThreadingModel, "Free")]
|
|
public CComObjectRootEx<CComMultiThreadModel>,
|
|
[!endif]
|
|
public CComCoClass<[!ClassName], &CLSID_[!CoClassName]>,
|
|
public IPropertyPageImpl<[!ClassName]>,
|
|
public CDialogImpl<[!ClassName]>
|
|
{
|
|
public:
|
|
[!ClassName]()
|
|
{
|
|
[!if=(FreeThreadedMarshaler, "TRUE")]
|
|
m_pUnkMarshaler = NULL;
|
|
[!endif]
|
|
m_dwTitleID = [!IDS_TITLE];
|
|
m_dwHelpFileID = [!IDS_HELPFILE];
|
|
m_dwDocStringID = [!IDS_DOCSTRING];
|
|
}
|
|
|
|
[!crlf]
|
|
enum {IDD = IDD_[!UpperShortName]};
|
|
|
|
[!crlf]
|
|
[!if=(NeedsGetControllingUnknown, "TRUE")]
|
|
DECLARE_GET_CONTROLLING_UNKNOWN()
|
|
[!endif]
|
|
DECLARE_REGISTRY_RESOURCEID([!IDR_REGISTRYID])
|
|
|
|
[!if=(Aggregatable, "NO")]
|
|
DECLARE_NOT_AGGREGATABLE([!ClassName])
|
|
[!endif]
|
|
[!if=(Aggregatable, "ONLY")]
|
|
DECLARE_ONLY_AGGREGATABLE([!ClassName])
|
|
[!endif]
|
|
[!crlf]
|
|
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
|
|
|
[!crlf]
|
|
BEGIN_COM_MAP([!ClassName])
|
|
COM_INTERFACE_ENTRY(IPropertyPage)
|
|
[!if=(FreeThreadedMarshaler, "TRUE")]
|
|
COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
|
|
[!endif]
|
|
END_COM_MAP()
|
|
|
|
[!crlf]
|
|
BEGIN_MSG_MAP([!ClassName])
|
|
CHAIN_MSG_MAP(IPropertyPageImpl<[!ClassName]>)
|
|
END_MSG_MAP()
|
|
// Handler prototypes:
|
|
// LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
|
// LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
|
|
// LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
|
|
|
|
[!if=(FreeThreadedMarshaler, "TRUE")]
|
|
[!crlf]
|
|
HRESULT FinalConstruct()
|
|
{
|
|
return CoCreateFreeThreadedMarshaler(
|
|
GetControllingUnknown(), &m_pUnkMarshaler.p);
|
|
}
|
|
|
|
[!crlf]
|
|
void FinalRelease()
|
|
{
|
|
m_pUnkMarshaler.Release();
|
|
}
|
|
|
|
[!crlf]
|
|
CComPtr<IUnknown> m_pUnkMarshaler;
|
|
[!endif]
|
|
|
|
[!crlf]
|
|
STDMETHOD(Apply)(void)
|
|
{
|
|
ATLTRACE(_T("[!ClassName]::Apply\n"));
|
|
for (UINT i = 0; i < m_nObjects; i++)
|
|
{
|
|
// Do something interesting here
|
|
// ICircCtl* pCirc;
|
|
// m_ppUnk[i]->QueryInterface(IID_ICircCtl, (void**)&pCirc);
|
|
// pCirc->put_Caption(CComBSTR("something special"));
|
|
// pCirc->Release();
|
|
}
|
|
m_bDirty = FALSE;
|
|
return S_OK;
|
|
}
|
|
};
|
|
|
|
[!crlf]
|
|
[!if=(FileExists, "FALSE")]
|
|
#endif //__[!UpperShortName]_H_
|
|
[!endif]
|