亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dwstate.h

?? These listed libraries are written in WTL. But it s really hard to mix both MFC & WTL together. Obvi
?? H
字號:
// Copyright (c) 2002
// Sergey Klimov (kidd@ukr.net)
// WTL Docking windows
//
// This code is provided "as is", with absolutely no warranty expressed
// or implied. Any use is at your own risk.
//
// This code may be used in compiled form in any way you desire. This
// file may be redistributed unmodified by any means PROVIDING it is
// not sold for profit without the authors written consent, and
// providing that this notice and the authors name is included. If
// the source code in  this file is used in any commercial application
// then a simple email woulod be nice.

#ifndef __WTL_DW__DWSTATE_H__
#define __WTL_DW__DWSTATE_H__

#include <cassert>
#include <queue>
#include "sstate.h"
#include "DockMisc.h"


namespace sstate{



struct IDockWndState : public IState
{
	virtual void Reset()=0;
	virtual bool Store(IStorge& /*stg*/)=0;
	virtual bool Restore(IStorge& stg,float /*xratio*/,float /*yratio*/)=0;
	virtual bool Store(dockwins::DFDOCKPOSEX* /*pDocPos*/)=0;
	virtual bool Restore(dockwins::DFDOCKPOSEX* /*pDocPos*/,float /*xratio*/,float /*yratio*/)=0;
};

class CDockWndMgr
{
#if _MSC_VER >= 7000
protected:
#else
public:
#endif
	class CImpl : public CStateBase<IState>
	{
#if _MSC_VER >= 7000
protected:
#else
public:
#endif
		struct CRestPos : dockwins::DFDOCKPOSEX
		{
			DWORD	weight;
			ID		id;
		};
protected:
		struct weighter : std::binary_function<CRestPos, CRestPos, bool>
		{
			bool operator()(const CRestPos& x, const CRestPos& y) const
			{
				return (x.weight > y.weight);
			}
		};

		typedef CStateHolder<IDockWndState>	CItem;
		typedef std::map<ID,CItem>			CBunch;
		typedef std::priority_queue<CRestPos,std::deque<CRestPos>, weighter > CRestQueue;

		class CStorer
		{
		public:
			CStorer(IStorge& stgTop)
					:m_stgTop(stgTop)
			{
			}
			void operator() (std::pair<const ID,CItem>& x) const
			{
				dockwins::DFDOCKPOSEX dpos;
				if(x.second->Store(&dpos))
				{
					std::basic_ostringstream<TCHAR> sstrKey;
					sstrKey.flags(std::ios::hex | std::ios::showbase );
					sstrKey<<ctxtWndPrefix<<x.first;
/*
					::RegSetValueEx(m_keyTop,sstrKey.str().c_str(),NULL,REG_BINARY,
										reinterpret_cast<CONST BYTE *>(&dpos),
										sizeof(dockwins::DFDOCKPOSEX));
*/
					m_stgTop.SetBinary(sstrKey.str().c_str(),&dpos,sizeof(dockwins::DFDOCKPOSEX));
				}
			}
		 protected:
			IStorge& m_stgTop;
		};
		class CQLoader
		{
		public:
			CQLoader(CRestQueue& q,IStorge& stgTop,float xratio,float yratio)
					:m_queue(q),m_stgTop(stgTop)
					,m_xratio(xratio),m_yratio(yratio)
			{
			}
			void operator() (std::pair<const ID,CItem>& x) const
			{
				CRestPos dpos;
				std::basic_ostringstream<TCHAR> sstrKey;
				sstrKey.flags(std::ios::hex | std::ios::showbase );
				sstrKey<<ctxtWndPrefix<<x.first;
				dockwins::DFDOCKPOSEX* ptr=static_cast<dockwins::DFDOCKPOSEX*>(&dpos);
/*
				DWORD dwType;
				DWORD cbData=sizeof(dockwins::DFDOCKPOSEX);
				if((::RegQueryValueEx(m_keyTop,sstrKey.str().c_str(),NULL,&dwType,
									 reinterpret_cast<LPBYTE>(ptr),&cbData)==ERROR_SUCCESS)
									 &&(dwType==REG_BINARY))
*/
				size_t size=sizeof(dockwins::DFDOCKPOSEX);
				bool restored=(m_stgTop.GetBinary(sstrKey.str().c_str(),ptr,size)==ERROR_SUCCESS
											&& (size==sizeof(dockwins::DFDOCKPOSEX)));
				if(restored)
				{
					if(dpos.bDocking)
					{
						dpos.id=x.first;
///////////////			dpos.UpdateWeight();
						assert(dpos.bDocking);
//						dpos.weight=0;
						dpos.weight=DWORD(dpos.dockPos.fPctPos*0xffff)&0xffff;
						dpos.weight|=(dpos.dockPos.nBar&0x3fff)<<16;
						dpos.weight|=((~dpos.dockPos.dwDockSide)&3)<<30;
///////////////////////////////////////////////////
						m_queue.push(dpos);
					}
					else
						restored=x.second->Restore(&dpos,m_xratio,m_yratio);
				}
				if(!restored)
					x.second->RestoreDefault();

			}
		protected:
			CRestQueue& m_queue;
			IStorge&	m_stgTop;
			float		m_xratio;
			float		m_yratio;
		};
		struct CDefRestorer
		{
			void operator() (std::pair<const ID,CItem>& x) const
			{
				x.second->RestoreDefault();
			}
		};
		struct CResetter
		{
			void operator() (std::pair<const ID,CItem>& x) const
			{
				x.second->Reset();
			}
		};
	public:
		CImpl():m_nextFreeID(/*std::numeric_limits<ID>::max()*/ULONG_MAX)
		{
		}
		ID GetUniqueID() const
		{
			return m_nextFreeID--;
		}
		virtual bool Store(IStorge& stg)
		{
			std::for_each(m_bunch.begin(),m_bunch.end(),CStorer(stg));
			return true;
		}
		virtual bool Restore(IStorge& stg,float xratio,float yratio)
		{
			std::for_each(m_bunch.begin(),m_bunch.end(),CResetter());
			std::for_each(m_bunch.begin(),m_bunch.end(),CQLoader(m_queue,stg,xratio,yratio));
			while(!m_queue.empty())
			{
//				 CRestPos& dpos=const_cast<CRestPos&>(m_queue.top());
				 CRestPos dpos=m_queue.top();
				 assert(m_bunch.find(dpos.id)!=m_bunch.end());
				 m_bunch[dpos.id]->Restore(&dpos,xratio,yratio);
				 m_queue.pop();
			}
			return true;
		}
		virtual bool RestoreDefault()
		{
			std::for_each(m_bunch.begin(),m_bunch.end(),CDefRestorer());
			return true;
		}
		ID Add(IDockWndState* pState)
		{
			ID id=GetUniqueID();
			Add(id,pState);
			return id;
		}
		void Add(ID id,IDockWndState* pState)
		{
			CStateHolder<IDockWndState> h (pState);
			m_bunch[id]=h;
		}
		void Remove(ID id)
		{
			assert(m_bunch.find(id)!=m_bunch.end());
			m_bunch.erase(id);
		}
	protected:
		mutable ID	m_nextFreeID;
		CBunch		m_bunch;
		CRestQueue	m_queue;
	};
protected:
	CDockWndMgr(CImpl* pImpl):m_pImpl(pImpl)
	{
	}
public:
	CDockWndMgr()
	{
		m_pImpl=new CImpl();
	}
	~CDockWndMgr()
	{
		assert(m_pImpl);
		m_pImpl->Release();
	}
	operator IState* ()
	{
		return m_pImpl;
	}
	ID Add(IDockWndState* pState)
	{
		return m_pImpl->Add(pState);
	}
	void Add(ID id,IDockWndState* pState)
	{
		m_pImpl->Add(id,pState);
	}
	void Remove(ID id)
	{
		m_pImpl->Remove(id);
	}
protected:
	CImpl* m_pImpl;
};

template<class T>
class CDockingWindowStateAdapter
{
#if _MSC_VER >= 7000
protected:
#else
public:
#endif
	template<class T>
	class CImplT: public CStateBase<IDockWndState>
	{
	public:
        CImplT(T& x,int nDefCmdShow=SW_SHOWNOACTIVATE)
			:m_dockWnd(x),m_nDefCmdShow(nDefCmdShow)
        {
			m_pos.dockPos.hdr.hWnd=NULL;
        }
		virtual void Reset(void)
		{
			if(m_dockWnd.GetDockingWindowPlacement(&m_pos))
				m_dockWnd.Hide();
			else
				m_pos.dockPos.hdr.hWnd=NULL;
		}
		virtual bool Store(IStorge& stg)
		{
			dockwins::DFDOCKPOSEX dpos;
			ZeroMemory(&dpos,sizeof(dockwins::DFDOCKPOSEX));
			bool bRes=Store(&dpos);
			if(bRes)
				bRes=(stg.SetBinary(ctxtPlacement,&dpos,sizeof(dockwins::DFDOCKPOSEX))==ERROR_SUCCESS);
/*
				bRes=(::RegSetValueEx(key,ctxtPlacement,NULL,REG_BINARY,
										reinterpret_cast<CONST BYTE *>(&dpos),
										sizeof(dockwins::DFDOCKPOSEX))==ERROR_SUCCESS);
*/
			return bRes;
		}
		virtual bool Restore(IStorge& stg,float xratio,float yratio)
		{
			dockwins::DFDOCKPOSEX dpos;
/*
			DWORD dwType;
			DWORD cbData=sizeof(dockwins::DFDOCKPOSEX);
            bool bRes=(::RegQueryValueEx(key,ctxtPlacement,NULL,&dwType,
							reinterpret_cast<LPBYTE>(&dpos),&cbData)==ERROR_SUCCESS)
							&&(dwType==REG_BINARY);
*/
			size_t size=sizeof(dockwins::DFDOCKPOSEX);
			bool bRes=(stg.GetBinary(ctxtPlacement,&dpos,size)==ERROR_SUCCESS
										&& (size==sizeof(dockwins::DFDOCKPOSEX)));
			if(bRes)
				bRes=Restore(&dpos,xratio,yratio);
			return bRes;
		}
		virtual bool RestoreDefault(void)
		{
			assert( (m_pos.dockPos.hdr.hWnd==NULL) || (m_pos.dockPos.hdr.hWnd==m_dockWnd.m_hWnd) );
			bool bRes=(m_pos.dockPos.hdr.hWnd!=NULL);
			if(bRes)
				bRes=m_dockWnd.SetDockingWindowPlacement(&m_pos);
/*
			if(!bRes
				&&!m_dockWnd.IsWindowVisible()
					&& !m_dockWnd.IsDocking())
				m_dockWnd.ShowWindow(m_nDefCmdShow);
*/
            return true;
		}
		virtual bool Store(dockwins::DFDOCKPOSEX* pDocPos)
		{
			return m_dockWnd.GetDockingWindowPlacement(pDocPos);
		}
		virtual bool Restore(dockwins::DFDOCKPOSEX* pDocPos,float xratio,float yratio)
		{
            if(pDocPos->bDocking)
            {
                dockwins::CDockingSide dside(pDocPos->dockPos.dwDockSide);
				if(dside.IsValid())
				{
					if(dside.IsHorizontal())
					{
						pDocPos->dockPos.nWidth=unsigned long(pDocPos->dockPos.nWidth*yratio);
						pDocPos->dockPos.nHeight=unsigned long(pDocPos->dockPos.nHeight*xratio);
					}
					else
					{
						pDocPos->dockPos.nWidth=unsigned long(pDocPos->dockPos.nWidth*xratio);
						pDocPos->dockPos.nHeight=unsigned long(pDocPos->dockPos.nHeight*yratio);
					}
				}
            }
            pDocPos->rect.left=LONG(pDocPos->rect.left*xratio);
            pDocPos->rect.right=LONG(pDocPos->rect.right*xratio);
            pDocPos->rect.top=LONG(pDocPos->rect.top*yratio);
            pDocPos->rect.bottom=LONG(pDocPos->rect.bottom*yratio);

			return m_dockWnd.SetDockingWindowPlacement(pDocPos);
		}
	protected:
		dockwins::DFDOCKPOSEX	m_pos;
		T&						m_dockWnd;
        int						m_nDefCmdShow;
		static	RECT			rcDefault;
	};
	typedef CImplT<T> CImpl;
	CDockingWindowStateAdapter(const CDockingWindowStateAdapter& x) : m_pImpl(0)
	{
	}
	CDockingWindowStateAdapter(CImpl* pImpl):m_pImpl(pImpl)
	{
	}
public:
	CDockingWindowStateAdapter(T& x,int nDefCmdShow=SW_SHOWNOACTIVATE)
	{
		m_pImpl=new CImpl(x,nDefCmdShow);
	}
	~CDockingWindowStateAdapter()
	{
		assert(m_pImpl);
		m_pImpl->Release();
	}
	operator IDockWndState* ()
	{
		return m_pImpl;
	}
protected:
	CImpl* m_pImpl;
};

}//namespace sstate
#endif // __WTL_DW__DWSTATE_H__

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人高清电影在线| 亚洲视频电影在线| 亚洲另类一区二区| 国产一区高清在线| 欧美日韩一区二区三区视频| 国产日韩欧美在线一区| 肉色丝袜一区二区| 91精品福利在线| 日本一区二区久久| 国产一区二区三区免费播放| 欧美片网站yy| 亚洲一区二区三区三| 9i在线看片成人免费| 欧美不卡激情三级在线观看| 亚洲国产精品一区二区www在线| 成人午夜私人影院| 久久欧美中文字幕| 激情小说欧美图片| 欧美成人在线直播| 日韩精品国产欧美| 在线成人av网站| 亚洲福利电影网| 欧美色图在线观看| 亚洲自拍欧美精品| 欧美亚洲免费在线一区| 亚洲激情六月丁香| 国产亚洲精久久久久久| 日韩电影免费在线看| 欧美精品在线视频| 性久久久久久久久| 91精品国产入口| 奇米亚洲午夜久久精品| 欧美一区二区三区四区久久| 五月天国产精品| 欧美午夜理伦三级在线观看| 亚洲一区在线观看免费| 欧美性大战久久| 亚洲成人一区二区在线观看| 欧美精品一卡二卡| 蜜桃视频一区二区| 91麻豆精品国产91久久久久久久久 | 国产成人综合在线播放| 久久精品亚洲乱码伦伦中文| 国产**成人网毛片九色| 中文久久乱码一区二区| 一本一道波多野结衣一区二区| 亚洲欧美乱综合| 7777女厕盗摄久久久| 麻豆免费精品视频| 国产亚洲精品aa午夜观看| 成人午夜碰碰视频| 亚洲人成网站在线| 欧美夫妻性生活| 国产精品456露脸| 自拍偷自拍亚洲精品播放| 欧美色爱综合网| 精品一区二区三区久久久| 国产日产欧美一区二区视频| 99久久久久免费精品国产| 亚洲成人自拍偷拍| 26uuuu精品一区二区| 色综合久久综合| 丝袜亚洲另类丝袜在线| 国产欧美日韩精品一区| 色欧美片视频在线观看| 另类小说图片综合网| 综合精品久久久| 日韩欧美在线123| 99精品一区二区三区| 日韩国产在线一| 中文字幕一区二区三区乱码在线| 7777精品伊人久久久大香线蕉最新版| 国产精品一品视频| 偷拍日韩校园综合在线| 国产欧美综合在线观看第十页| 欧美亚洲一区二区在线| 国产成人av资源| 日韩黄色一级片| 亚洲美女一区二区三区| 精品美女在线观看| 欧美视频完全免费看| 国产91在线看| 蜜臀久久久99精品久久久久久| 亚洲少妇中出一区| 久久婷婷色综合| 91精品国产黑色紧身裤美女| 99re6这里只有精品视频在线观看| 日本亚洲三级在线| 亚洲伊人伊色伊影伊综合网| 日本一区二区三区久久久久久久久不 | 久久久久久日产精品| 欧美日韩一级视频| 97精品久久久久中文字幕| 老司机精品视频在线| 亚洲综合免费观看高清完整版| 久久精品日产第一区二区三区高清版| 欧美日韩另类国产亚洲欧美一级| 成人av网在线| 国产乱子伦视频一区二区三区| 天天综合日日夜夜精品| 精品一区二区三区欧美| 亚洲网友自拍偷拍| 亚洲美女视频一区| 亚洲日本一区二区三区| 久久久久国产精品免费免费搜索| 宅男噜噜噜66一区二区66| 欧美视频一区二区三区四区| 欧美主播一区二区三区美女| 色综合色综合色综合| 色香蕉久久蜜桃| 色94色欧美sute亚洲线路二| 91视频在线观看免费| 91在线免费看| www.99精品| 一本色道**综合亚洲精品蜜桃冫| va亚洲va日韩不卡在线观看| gogogo免费视频观看亚洲一| 成人免费看的视频| av激情亚洲男人天堂| 9i在线看片成人免费| 91亚洲午夜精品久久久久久| 成人黄色电影在线| 99在线热播精品免费| 99久久免费精品高清特色大片| 99久久精品国产导航| 在线观看国产精品网站| 欧美性大战久久久久久久| 欧美日韩一级片网站| 欧美一级精品在线| 亚洲精品在线电影| 国产欧美精品一区aⅴ影院 | 精品精品国产高清a毛片牛牛| 日韩精品最新网址| 中文一区二区在线观看| 中文字幕亚洲一区二区av在线 | 中文字幕欧美三区| 国产精品久久久一区麻豆最新章节| 国产精品欧美极品| 亚洲男女毛片无遮挡| 午夜精品福利在线| 激情五月激情综合网| 成人国产免费视频| 在线观看91视频| 日韩欧美国产高清| 国产精品午夜在线| 亚洲第一精品在线| 国模少妇一区二区三区| 99国产精品国产精品久久| 欧美丰满嫩嫩电影| 久久久久久久av麻豆果冻| 亚洲欧美日韩国产另类专区| 亚洲不卡一区二区三区| 色婷婷国产精品久久包臀| 日韩视频免费观看高清完整版在线观看| 久久久久国产精品人| 亚洲伊人色欲综合网| 国产福利电影一区二区三区| 欧美怡红院视频| 国产三级久久久| 日日欢夜夜爽一区| 成人免费黄色在线| 日韩欧美在线综合网| 伊人婷婷欧美激情| 国产另类ts人妖一区二区| 欧美色手机在线观看| 久久精品视频在线免费观看| 丝袜诱惑制服诱惑色一区在线观看| 粉嫩蜜臀av国产精品网站| 91麻豆精品国产91久久久更新时间 | 国产a久久麻豆| 777xxx欧美| 一级中文字幕一区二区| 国产ts人妖一区二区| 日韩亚洲欧美成人一区| 亚洲精品中文字幕在线观看| 国产成人自拍在线| 日韩小视频在线观看专区| 亚洲国产精品尤物yw在线观看| 成人免费av在线| 久久日韩精品一区二区五区| 首页国产欧美久久| 欧洲av一区二区嗯嗯嗯啊| 国产精品福利影院| 国产精品一区二区三区乱码| 亚洲精品在线三区| 性久久久久久久| 欧美日韩午夜影院| 一区二区三区四区不卡在线| 成人黄页在线观看| 日本一区二区三区电影| 国产高清在线精品| 国产欧美一区二区精品性| 久久国产婷婷国产香蕉| 欧美一级在线免费| 成人午夜精品一区二区三区| 国产亚洲欧美激情| 国产一区二区精品久久91| 欧美videossexotv100| 精品一二线国产| 欧美本精品男人aⅴ天堂|