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

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

?? dwstate.h

?? 一款最完整的工業組態軟源代碼
?? 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__

#pragma once

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


namespace sstate{



struct IDockWndState : public IState
{
	virtual void Reset()=0;
	virtual bool Store(IMainState* /*pMState*/,CRegKey& /*key*/)=0;
	virtual bool Restore(IMainState* /*pMState*/,CRegKey& /*key*/)=0;
	virtual bool Store(IMainState* /*pMState*/,dockwins::DFDOCKPOSEX* /*pDocPos*/)=0;
	virtual bool Restore(IMainState* /*pMState*/,dockwins::DFDOCKPOSEX* /*pDocPos*/)=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(IMainState* pMState,CRegKey& keyTop)
					:m_pMState(pMState),m_keyTop(keyTop)
			{
			}
			void operator() (std::pair<const ID,CItem>& x) const
			{
				dockwins::DFDOCKPOSEX dpos={0};
				if(x.second->Store(m_pMState,&dpos))
				{
					std::basic_stringstream<TCHAR> sstrKey;
					sstrKey.flags(std::ios::hex | std::ios::showbase );
					sstrKey<<x.first;
					::RegSetValueEx(m_keyTop,sstrKey.str().c_str(),NULL,REG_BINARY,
										reinterpret_cast<CONST BYTE *>(&dpos),
										sizeof(dockwins::DFDOCKPOSEX));
				}
			}
		 protected:
			IMainState*	m_pMState;
			CRegKey&	m_keyTop;
		};
		class CQLoader
		{
		public:
			CQLoader(CRestQueue& q,IMainState* pMState,CRegKey& keyTop)
					:m_queue(q),m_pMState(pMState),m_keyTop(keyTop)
			{
			}
			void operator() (std::pair<const ID,CItem>& x) const
			{
				CRestPos dpos;
				std::basic_stringstream<TCHAR> sstrKey;
				sstrKey.flags(std::ios::hex | std::ios::showbase );
				sstrKey<<x.first;
				DWORD dwType;
				DWORD cbData=sizeof(dockwins::DFDOCKPOSEX);
				dockwins::DFDOCKPOSEX* ptr=static_cast<dockwins::DFDOCKPOSEX*>(&dpos);
				if((::RegQueryValueEx(m_keyTop,sstrKey.str().c_str(),NULL,&dwType,
									 reinterpret_cast<LPBYTE>(ptr),&cbData)==ERROR_SUCCESS)
									 &&(dwType==REG_BINARY))
				{
					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
						x.second->Restore(m_pMState,&dpos);
				}
				else
					x.second->RestoreDefault();

			}
		protected:
			CRestQueue& m_queue;
			IMainState*	m_pMState;
			CRegKey&	m_keyTop;
		};
		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(IMainState* pMState,CRegKey& key)
		{
			std::for_each(m_bunch.begin(),m_bunch.end(),CStorer(pMState,key));
			return true;
		}
		virtual bool Restore(IMainState* pMState,CRegKey& key)
		{
			std::for_each(m_bunch.begin(),m_bunch.end(),CResetter());
			std::for_each(m_bunch.begin(),m_bunch.end(),CQLoader(m_queue,pMState,key));
			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(pMState,&dpos);
				 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)
        {
			::ZeroMemory(&m_pos, sizeof(dockwins::DFDOCKPOSEX));
			m_pos.dockPos.hdr.hWnd=NULL;
        }
		virtual void Reset()
		{
			if(m_dockWnd.GetDockingWindowPlacement(&m_pos))
				m_dockWnd.Hide();
			else
				m_pos.dockPos.hdr.hWnd=NULL;
		}
		virtual bool Store(IMainState* pMState,CRegKey& key)
		{
			dockwins::DFDOCKPOSEX dpos={0};
			ZeroMemory(&dpos,sizeof(dockwins::DFDOCKPOSEX));
			bool bRes=Store(pMState,&dpos);
			if(bRes)
				bRes=(::RegSetValueEx(key,ctxtPlacement,NULL,REG_BINARY,
										reinterpret_cast<CONST BYTE *>(&dpos),
										sizeof(dockwins::DFDOCKPOSEX))==ERROR_SUCCESS);
			return bRes;
		}
		virtual bool Restore(IMainState* pMState,CRegKey& key)
		{
			dockwins::DFDOCKPOSEX dpos={0};
			DWORD dwType;
			DWORD cbData=sizeof(dockwins::DFDOCKPOSEX);
            bool bRes=(::RegQueryValueEx(key,ctxtPlacement,NULL,&dwType,
							reinterpret_cast<LPBYTE>(&dpos),&cbData)==ERROR_SUCCESS)
							&&(dwType==REG_BINARY);
			if(bRes)
				bRes=Restore(pMState,&dpos);
			return bRes;
		}
		virtual bool RestoreDefault()
		{
			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(IMainState* /*pMState*/,dockwins::DFDOCKPOSEX* pDocPos)
		{
			return m_dockWnd.GetDockingWindowPlacement(pDocPos);
		}
		virtual bool Restore(IMainState* pMState,dockwins::DFDOCKPOSEX* pDocPos)
		{
            if(pDocPos->bDocking)
            {
                dockwins::CDockingSide dside(pDocPos->dockPos.dwDockSide);
				if(dside.IsValid())
				{
					if(dside.IsHorizontal())
					{
						pDocPos->dockPos.nWidth=unsigned long(pDocPos->dockPos.nWidth*pMState->YRatio());
						pDocPos->dockPos.nHeight=unsigned long(pDocPos->dockPos.nHeight*pMState->XRatio());
					}
					else
					{
						pDocPos->dockPos.nWidth=unsigned long(pDocPos->dockPos.nWidth*pMState->XRatio());
						pDocPos->dockPos.nHeight=unsigned long(pDocPos->dockPos.nHeight*pMState->YRatio());
					}
				}
            }
            pDocPos->rect.left=LONG(pDocPos->rect.left*pMState->XRatio());
            pDocPos->rect.right=LONG(pDocPos->rect.right*pMState->XRatio());
            pDocPos->rect.top=LONG(pDocPos->rect.top*pMState->YRatio());
            pDocPos->rect.bottom=LONG(pDocPos->rect.bottom*pMState->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一区二区三区免费野_久草精品视频
欧美一区二区三区四区视频| 亚洲一区二区视频在线观看| 麻豆精品国产传媒mv男同| 欧美日韩国产成人在线91| 亚洲一区二区三区精品在线| 日本高清不卡视频| 亚洲综合免费观看高清在线观看| 一本一道波多野结衣一区二区| 亚洲欧美日韩国产中文在线| 91猫先生在线| 亚洲一区在线电影| 欧美日韩第一区日日骚| 午夜精品在线视频一区| 91精品国产综合久久精品麻豆 | 国产精品丝袜一区| 不卡的看片网站| 自拍偷自拍亚洲精品播放| 成人精品视频网站| 一区二区三区高清在线| 欧美日韩一卡二卡三卡| 麻豆成人久久精品二区三区小说| 91精品国产乱| 国产激情视频一区二区三区欧美| 亚洲欧洲一区二区在线播放| 欧美在线你懂得| 日本欧美肥老太交大片| 久久久久国产成人精品亚洲午夜| 成人avav影音| 亚洲成a人v欧美综合天堂下载 | 色8久久人人97超碰香蕉987| 一区二区三区国产豹纹内裤在线| 欧美肥大bbwbbw高潮| 狠狠色伊人亚洲综合成人| 中文字幕在线不卡| 欧美日本精品一区二区三区| 国产专区综合网| 亚洲欧洲综合另类| 日韩一级二级三级精品视频| 大胆亚洲人体视频| 亚洲午夜久久久| 欧美精品一区二区三区蜜桃| 99久久伊人精品| 日韩电影在线一区二区| 亚洲欧洲中文日韩久久av乱码| 欧美剧在线免费观看网站| 国产剧情一区二区| 亚洲国产婷婷综合在线精品| 久久久不卡网国产精品一区| 日本韩国精品在线| 国产在线一区二区| 一区二区三区不卡在线观看| 精品久久久久久久久久久院品网| 99国产精品国产精品毛片| 久久超碰97中文字幕| 亚洲免费观看高清在线观看| 久久综合色之久久综合| 欧美日韩你懂得| 成人高清在线视频| 日韩专区欧美专区| 亚洲视频免费看| 国产色一区二区| 欧美夫妻性生活| 色呦呦一区二区三区| 国产激情偷乱视频一区二区三区| 日韩在线一区二区| 亚洲欧美国产77777| 中文字幕精品一区二区精品绿巨人| 日韩免费观看高清完整版| 欧美伊人久久久久久午夜久久久久| 国产ts人妖一区二区| 美女在线观看视频一区二区| 一区二区三区四区不卡在线 | 精品国产一区二区三区四区四| 91美女片黄在线观看91美女| 国产高清不卡一区| 免费高清成人在线| 视频一区二区欧美| 一个色综合网站| 亚洲精品第一国产综合野| 中文字幕中文字幕中文字幕亚洲无线| 精品免费日韩av| 欧美白人最猛性xxxxx69交| 欧美久久婷婷综合色| 欧洲色大大久久| 日本韩国欧美三级| 在线观看一区二区视频| 91在线视频播放地址| 欧洲在线/亚洲| 日本久久一区二区三区| 色综合天天综合在线视频| 成人综合在线观看| 国产高清在线精品| 不卡影院免费观看| 91日韩一区二区三区| 91网站视频在线观看| 91蝌蚪国产九色| 色综合久久久久久久久| 色一情一乱一乱一91av| 日本韩国欧美一区二区三区| 欧美系列亚洲系列| 欧美高清精品3d| 欧美丰满高潮xxxx喷水动漫| 在线观看免费视频综合| 欧美写真视频网站| 欧美一级久久久| 2020国产精品| 中文字幕亚洲成人| 亚洲国产欧美在线| 日韩1区2区3区| 国产精品一区在线观看你懂的| 国产98色在线|日韩| 99久久国产免费看| 欧美日韩成人激情| 日本一区二区三级电影在线观看 | 国产午夜三级一区二区三| 日本一区免费视频| 亚洲精品视频一区二区| 丝袜美腿亚洲一区| 国产资源精品在线观看| 99在线视频精品| 欧美影视一区在线| 欧洲另类一二三四区| 欧美xxxx老人做受| 中文字幕综合网| 亚洲亚洲精品在线观看| 精品在线免费视频| 91香蕉视频污| 日韩色视频在线观看| 中文字幕一区二区三区av| 香蕉乱码成人久久天堂爱免费| 久久精品免费观看| 在线观看国产91| 久久久久久一二三区| 亚洲资源中文字幕| 精品亚洲成a人| 在线亚洲精品福利网址导航| 2024国产精品| 亚洲www啪成人一区二区麻豆 | 日韩电影在线一区二区| 成人av中文字幕| 91精品婷婷国产综合久久性色| 欧美国产综合色视频| 天天综合日日夜夜精品| 成人国产亚洲欧美成人综合网| 91精品国产aⅴ一区二区| 国产精品久久久久久亚洲伦| 日本午夜一本久久久综合| 99精品视频在线播放观看| 精品久久久久久久人人人人传媒| 亚洲精品中文字幕在线观看| 国产精品一区免费视频| 欧美一区二区在线看| 亚洲婷婷国产精品电影人久久| 韩国欧美国产1区| 91.成人天堂一区| 亚洲精品久久久久久国产精华液| 国内精品写真在线观看| 欧美日韩国产小视频在线观看| 国产精品三级av| 国产精品996| 欧美成人乱码一区二区三区| 亚洲不卡av一区二区三区| 91丨porny丨国产| 久久久www免费人成精品| 免费人成精品欧美精品| 欧美日本韩国一区| 亚洲国产精品天堂| 91九色02白丝porn| 一区二区三区成人在线视频| youjizz久久| 中文字幕一区二区三中文字幕| 国产不卡在线视频| 久久日韩精品一区二区五区| 奇米888四色在线精品| 欧美欧美欧美欧美| 午夜精品久久久| 在线不卡一区二区| 日韩电影网1区2区| 91精品免费观看| 男人的天堂久久精品| 91精品国产色综合久久不卡电影 | 99久久综合狠狠综合久久| 国产欧美一区二区精品久导航| 激情另类小说区图片区视频区| 精品国产污网站| 韩国毛片一区二区三区| 精品免费国产一区二区三区四区| 日韩国产成人精品| 日韩色在线观看| 黄页网站大全一区二区| 中文字幕不卡三区| 95精品视频在线| 日韩国产一区二| 久久久蜜桃精品| 不卡av免费在线观看| 精品国产凹凸成av人导航| 国产精品伊人色| 日韩美女啊v在线免费观看| 色偷偷久久一区二区三区| 首页亚洲欧美制服丝腿|