proppage.hpp at tip Вы: nobody
Вход

File sqlite1c/_1Common/proppage.hpp from the latest check-in


/*
proppage.hpp
     ,    .
:
 1.     .
	Style - child
	Border - none
	Visible - false
 2.  ClassWizard,  "  "  
 3.     :
	BOOL IsDirty(); //   TRUE,   
	BOOL OnApply(); //    Apply  Ok.   TRUE,   
	static LPCSTR GetTitle(){return " ";}
 4.      CPropPageCreator<>::Init()

     ,       "",
    	CPropPageCreator<>::MakeDirty();
*/

#pragma once

#include "traps.hpp"

template<typename T>
class CPropPageCreator
{
public:

	//      COlePropertyPageSite
	static COlePropertyPageSite*& GetPageSite(){static COlePropertyPageSite* pSite;return pSite;}
	
	static void MakeDirty()
	{
		if(COlePropertyPageSite* pSite=GetPageSite())
			pSite->m_pageSite.OnStatusChange(PROPPAGESTATUS_DIRTY);
	}

	class CPropPageDoc
	{
	public:
		T* m_pDlg;
		DWORD m_buf[10];

		CPropPageDoc() : m_pDlg(NULL)
		{
			memset(m_buf, 0, sizeof(m_buf));
		}

		void operator = (class CPropPageDoc const & Dest)
		{
			m_pDlg = NULL;
			memcpy(m_buf, Dest.m_buf, sizeof(m_buf));
		};

		virtual void __stdcall vProc00(void){}
		virtual void __stdcall vProc04(void){}
		virtual void __stdcall ClosePropDlg(void)
		{
			delete m_pDlg;
			GetPageSite()=NULL;
			delete this;
		}
		virtual void __stdcall vProc0C(void){}
		virtual void __stdcall CreatePropDlg(HWND hMainWnd, CRect* rect, BOOL bModal)
		{
			m_pDlg = new T(NULL);
			AfxSetResourceHandle(hMyInst);
			m_pDlg->Create(T::IDD, CWnd::FromHandle(hMainWnd));
			AfxSetResourceHandle(h1CResource);
			m_pDlg->MoveWindow(rect);
		}
		virtual void __stdcall vProc14(void){}
		virtual void __stdcall vProc18(void){}
		virtual void __stdcall vProc1C(DWORD dwParam1, DWORD dwParam2){}
		virtual void __stdcall ActivatePropDlg(DWORD dwFlag)
		{
			if(m_pDlg)
				m_pDlg->ShowWindow(dwFlag);
		}
		virtual void __stdcall vProc24(void){}
		virtual BOOL __stdcall IsSaved(void)
		{
			if(m_pDlg && m_pDlg->IsDirty())
				return FALSE;
			return TRUE;
		}
		virtual HRESULT __stdcall Save(void)
		{
			if(m_pDlg)
				return m_pDlg->OnApply() ? S_OK : E_FAIL;
			return S_OK;
		}
	};

	struct SPropPage
	{
	public:
		BOOL m_bHasDialog;
		DWORD m_1;
		DWORD m_2;
		DWORD m_3;
		DWORD m_4;
		DWORD m_5;
		DWORD m_6;
		DWORD m_DlgW;
		DWORD m_DlgH;
		DWORD m_9;
		DWORD m_10;
		WORD m_ResNum;
		WORD m_ResType;
		CPropPageDoc* m_DlgDoc;
		CString m_Path;
		DWORD m_14;
		DWORD m_15;
		DWORD m_16;
		DWORD m_17;
		DWORD m_18;

		SPropPage() : m_DlgDoc(new CPropPageDoc){}
		~SPropPage(){delete m_DlgDoc;}

		void operator = (SPropPage const & Dest)
		{
			memcpy(this, &Dest, sizeof(*this));
			m_DlgDoc = new CPropPageDoc;
			*m_DlgDoc = *Dest.m_DlgDoc;
		};

		SPropPage(struct SPropPage const & Dest)
		{
			*this = Dest;
		};
	};
	
	typedef CArray<struct SPropPage, struct SPropPage> CArraySPropPage;

	static CTrapSwap*& GetTrap(){static CTrapSwap* pTrap; return pTrap;}

	struct COlePropertyPageSiteWrap : COlePropertyPageSite
	{
		int OnInitDialogWrap(void)
		{
			trapswaper tr(*GetTrap());
			
			int ret=COlePropertyPageSite::OnInitDialog();
			m_TabCtrl.InsertItem(m_TabCtrl.GetItemCount(), T::GetTitle(), 0);

			SPropPage newPropPage;
			newPropPage.m_bHasDialog = FALSE;

			CArraySPropPage* PropPages = reinterpret_cast<CArraySPropPage*>(&m_PropPages);
			PropPages->Add(newPropPage);

			GetPageSite()=this;
			return ret;
		}
	};

	static void Init()
	{
		CTrapSwap*& tr=GetTrap();
		tr=new CTrapSwap;
		tr->SetTrapByName("frame.dll", "?OnInitDialog@COlePropertyPageSite@@MAEHXZ",
			&COlePropertyPageSiteWrap::OnInitDialogWrap);
	}
};