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

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

?? wndfrmpkg.h

?? 一款最完整的工業組態軟源代碼
?? H
?? 第 1 頁 / 共 3 頁
字號:

		if(bGhostMove)
			pTracker.reset(new CSplitterMoveTrackerGhost(hWnd,*this,pt,rc));
		else
			pTracker.reset(new CSplitterMoveTrackerFull(hWnd,*this,pt,rc));

		bool bRes=false;
		if(const_iterator(*pTracker)!=m_frames.end())
			 bRes=TrackDragAndDrop(*pTracker,hWnd);
		return bRes;
	}
*/
	bool StartSliding(HWND hWnd,const CPoint& pt,const CRect& rc,bool bGhostMove)
	{
		bool bRes=false;
		position pos=IsHorizontal() ?pt.x :pt.y;
		const_iterator i=m_frames.locate(pos);
		if(i!=m_frames.end())
		{
			CEmbeddedSplitterBar splitter(!IsHorizontal(),(*i),rc);
			if(splitter.IsPtIn(pt))
			{
				std::auto_ptr<CSplitterMoveTrackerBase> pTracker;

#if (_MSC_VER >= 1310)
				if(bGhostMove)
					pTracker.reset(new CSplitterMoveTrackerGhost(hWnd,*this,pt,rc));
				else
					pTracker.reset(new CSplitterMoveTrackerFull(hWnd,*this,pt,rc));
#else // (_MSC_VER < 1310)
				if(bGhostMove)
					pTracker=std::auto_ptr<CSplitterMoveTrackerBase>(
										new CSplitterMoveTrackerGhost(hWnd,*this,pt,rc));
				else
					pTracker=std::auto_ptr<CSplitterMoveTrackerBase>(
										new CSplitterMoveTrackerFull(hWnd,*this,pt,rc));
#endif

				if(const_iterator(*pTracker)!=m_frames.end())
					 bRes=TrackDragAndDrop(*pTracker,hWnd);
			}
		}
		return bRes;
	}

	bool UpdateLayout(const CRect& rc)
	{
		CBounds bounds;
        if(IsHorizontal())
        {
                bounds.low=rc.left;
                bounds.hi=rc.right;
        }
        else
        {
                bounds.low=rc.top;
                bounds.hi=rc.bottom;
        }
		bounds.low-=splitterSize;

		CBounds::distance_t limit=m_frames.distance_limit();
        if(bounds.distance()<limit)
                        bounds.hi=bounds.low+limit;
        m_frames.set_bounds(bounds);
		return Arrange(rc);
	}

	void GetMinFrameSize(const DFMHDR* pHdr,CSize& sz) const
	{
		MINMAXINFO mmInfo;
		ZeroMemory(&mmInfo,sizeof(MINMAXINFO));
		::SendMessage(pHdr->hWnd,WM_GETMINMAXINFO,NULL,reinterpret_cast<LPARAM>(&mmInfo));
		sz.cx=mmInfo.ptMinTrackSize.x;
		sz.cy=mmInfo.ptMinTrackSize.y;
	}
	LRESULT GetMinFrameDist(const DFMHDR* pHdr) const
	{
		CSize sz;
		GetMinFrameSize(pHdr,sz);
		return (IsHorizontal()) ? sz.cx : sz.cy;
	}

	void GetMinMaxInfo(LPMINMAXINFO pMinMaxInfo) const
	{
		if(m_frames.size()!=0)
		{
			pMinMaxInfo=std::accumulate(m_frames.begin(),m_frames.end(),
											pMinMaxInfo,CMinMaxInfoAccumulator<splitterSize>(IsHorizontal()));
			if(IsHorizontal())
				pMinMaxInfo->ptMinTrackSize.x-=splitterSize;
			else
				pMinMaxInfo->ptMinTrackSize.y-=splitterSize;
		}
	}
	void Draw(CDC& dc,const CRect& rc) const
	{
        if(m_frames.begin()!=m_frames.end())
			std::for_each(++m_frames.begin(),m_frames.end(),CEmbeddedSplitterBarPainter(dc,!IsHorizontal(),rc));
	}

	bool AcceptDock(DFDOCKRECT* pHdr,const CRect& rc)
	{
		bool bRes=false;
		CSize sz;
		GetMinFrameSize(&(pHdr->hdr),sz);
		if(rc.PtInRect(CPoint(pHdr->rect.left,pHdr->rect.top))
			&& (sz.cx<=rc.Width())
				&& (sz.cy<=rc.Height())
					&& ((( (IsHorizontal()) ? sz.cx : sz.cy)+m_frames.distance_limit())<(m_frames.hi()-m_frames.low())))
		{
			if(IsHorizontal())
			{
				pHdr->rect.top=rc.top;
				pHdr->rect.bottom=rc.bottom;
			}
			else
			{
				pHdr->rect.left=rc.left;
				pHdr->rect.right=rc.right;
			}
			bRes=true;
		}
		return bRes;
	}
	bool Dock(CFrame& frame,const DFDOCKRECT* pHdr,const CRect& rc)
	{
		position		  pos;
		CFrames::distance len;

		if(IsHorizontal())
		{
			pos=pHdr->rect.left;
			len=pHdr->rect.right-pHdr->rect.left;
		}
		else
		{
			pos=pHdr->rect.top;
			len=pHdr->rect.bottom-pHdr->rect.top;
		}

		iterator i=m_frames.locate(pos);
		if(i!=m_frames.end())
		{
			iterator inext=i;
			++inext;
			CBounds fbounds((*i),(inext!=m_frames.end()) ? position(*inext) : m_frames.hi());
			if((fbounds.low+(fbounds.hi-fbounds.low)/3)<pos)
				i=inext;
		}
		frame=pos;
		m_frames.insert(i,frame,len);

		return Arrange(rc);
	}
	bool Undock(const DFMHDR* pHdr,const CRect& rc)
	{
		iterator i=std::find_if(m_frames.begin(),m_frames.end(),CFrame::CCmp(pHdr->hWnd));
		assert(i!=m_frames.end());
		m_frames.erase(i);
		return Arrange(rc);
	}
	bool Replace(const DFDOCKREPLACE* pHdr,const CRect& rc)
	{
		iterator i=std::find_if(m_frames.begin(),m_frames.end(),CFrame::CCmp(pHdr->hdr.hWnd));
		assert(i!=m_frames.end());
		m_frames.replace(i,CFrame(0,pHdr->hWnd));
		return Arrange(rc);
	}

protected:
	bool	m_bHorizontal;
	CFrames	m_frames;
};

template< class TTraits = CDockingFrameTraits >
class CWndFramesPackage : public CWndFramesPackageBase<CWndFrame,TTraits >
{
	typedef typename CWndFrame CFrame;
	typedef typename TTraits CTraits;
	typedef typename CTraits::CSplitterBar	CSplitterBar;
	typedef CWndFramesPackage<TTraits> thisClass;
	typedef CWndFramesPackageBase<CFrame,TTraits > baseClass;
public:
	CWndFramesPackage(bool bHorizontal):baseClass(bHorizontal)
	{
	}
	void PrepareForDocking(CWindow wnd,HDOCKBAR bar)
	{
		wnd.ShowWindow(SW_HIDE);
		DWORD style = wnd.GetWindowLong(GWL_STYLE);
		DWORD newStyle = style&(~WS_POPUP)|WS_CHILD;
		wnd.SetWindowLong( GWL_STYLE, newStyle);
		wnd.SetParent(bar);
		wnd.SendMessage(WM_NCACTIVATE,TRUE);
		wnd.SendMessage(WMDF_NDOCKSTATECHANGED,
					MAKEWPARAM(TRUE,IsHorizontal()),
					reinterpret_cast<LPARAM>(bar));
	}
	void PrepareForUndocking(CWindow wnd,HDOCKBAR bar)
	{
		wnd.ShowWindow(SW_HIDE);
		DWORD style = wnd.GetWindowLong(GWL_STYLE);
		DWORD newStyle = style&(~WS_CHILD)|WS_POPUP;
		wnd.SetWindowLong( GWL_STYLE, newStyle);
		wnd.SetParent(NULL);

		wnd.SendMessage(WMDF_NDOCKSTATECHANGED,
			FALSE,
			reinterpret_cast<LPARAM>(bar));
	}

	bool SetDockingPosition(const DFDOCKPOS* pHdr,const CRect& rc)
	{
		assert(::IsWindow(pHdr->hdr.hWnd));
		CWindow wnd(pHdr->hdr.hWnd);
		PrepareForDocking(wnd,pHdr->hdr.hBar);
		position pos=m_frames.low()+position((m_frames.hi()-m_frames.low())*pHdr->fPctPos);
		m_frames.insert(CFrame(pos,pHdr->hdr.hWnd),pHdr->nHeight);
//		wnd.ShowWindow(SW_SHOWNA);
		bool bRes=Arrange(rc);
		wnd.SetWindowPos(NULL,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED | SWP_SHOWWINDOW);
		return bRes;
	}

	bool GetDockingPosition(DFDOCKPOS* pHdr,const CRect& /*rc*/) const
	{
		assert(::IsWindow(pHdr->hdr.hWnd));
		const_iterator i=std::find_if(m_frames.begin(),m_frames.end(),CFrame::CCmp(pHdr->hdr.hWnd));
		bool bRes=(i!=m_frames.end());
		if(bRes)
		{
			position pos=*i-m_frames.low();
			pHdr->fPctPos=float(pos)/(m_frames.hi()-m_frames.low());
			pHdr->nHeight=m_frames.get_frame_size(i)-CSplitterBar::GetThickness();
//			pHdr->nWidth=IsHorizontal() ? rc.Height() : rc.Width();
//			pHdr->nWidth-=CSplitterBar::GetThickness();
			if(m_frames.size()==1)
				pHdr->dwDockSide|=CDockingSide::sSingle;
		}
		return bRes;
	}

	bool AcceptDock(DFDOCKRECT* pHdr,const CRect& rc)
	{
		return (!((m_frames.size()==1)
					&&(m_frames.begin()->hwnd()==pHdr->hdr.hWnd)))
						  &&baseClass::AcceptDock(pHdr,rc);
	}
	bool Dock(DFDOCKRECT* pHdr,const CRect& rc)
	{
		assert(::IsWindow(pHdr->hdr.hWnd));
		CWindow wnd(pHdr->hdr.hWnd);
		PrepareForDocking(wnd,pHdr->hdr.hBar);
		CFrame frame(0,pHdr->hdr.hWnd);
		bool bRes=baseClass::Dock(frame,pHdr,rc);
		wnd.SetWindowPos(NULL,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED | SWP_SHOWWINDOW);
//		wnd.ShowWindow(SW_SHOWNA);
		return bRes;

	}
	bool Undock(DFMHDR* pHdr,const CRect& rc)
	{
		bool bRes=baseClass::Undock(pHdr,rc);
		assert(bRes);
		PrepareForUndocking(pHdr->hWnd,pHdr->hBar);
		if(m_frames.size()==0)
		{
			DFMHDR dockHdr;
			dockHdr.hWnd = pHdr->hBar;
			dockHdr.hBar = ::GetParent(pHdr->hBar);
			assert(::IsWindow(dockHdr.hBar));
			dockHdr.code=DC_UNDOCK;
			::SendMessage(dockHdr.hBar,WMDF_DOCK,NULL,reinterpret_cast<LPARAM>(&dockHdr));
            ::PostMessage(dockHdr.hWnd,WM_CLOSE,NULL,NULL);
		}
		return bRes;
	}

	bool Replace(const DFDOCKREPLACE* pHdr,const CRect& rc)
	{
		PrepareForUndocking(pHdr->hdr.hWnd,pHdr->hdr.hBar);
		PrepareForDocking(pHdr->hWnd,pHdr->hdr.hBar);
		bool bRes=baseClass::Replace(pHdr,rc);
		assert(bRes);
		::SetWindowPos(pHdr->hWnd,NULL,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED | SWP_SHOWWINDOW);
//		::ShowWindow(pHdr->hWnd,SW_SHOWNA);
		return bRes;
	}

};

template<class T>
class CPtrFrame
{
	typedef CPtrFrame<T> thisClass;
public:
	typedef typename T::position position;
	typedef typename T::distance distance;

	class CCmp
	{
	public:
		CCmp(HWND hWnd)	:m_hWnd(hWnd)
		{
		}
		bool operator ()(const thisClass& frame) const
		{
			return (frame.hwnd() == m_hWnd);
		}
	protected:
		HWND m_hWnd;
	};

	CPtrFrame(const CPtrFrame& x):m_pos(x.m_pos),m_ptr(x.m_ptr)
	{
	}
	CPtrFrame(position pos, T* ptr)
		:m_pos(pos),m_ptr(ptr)
	{
	}
	HWND hwnd() const
	{
		return m_ptr->operator HWND();
	}

	operator position() const
	{
		return (position)m_pos;
	}

	thisClass& operator += (position val)
	{
		m_pos+=val;
		return *this;
	}
	thisClass& operator -= (position val)
	{
		m_pos-=val;
		return *this;
	}

	thisClass& operator = (position pos)
	{
		m_pos=pos;
		return *this;
	}

	thisClass& operator = (double pos)
	{
		m_pos=pos;
		return *this;
	}

	double get_real()
	{
		return m_pos;
	}

	HDWP DeferFramePos(HDWP hdwp,long x1,long y1,long x2,long y2) const
	{
		return m_ptr->DeferFramePos(hdwp,x1,y1,x2,y2);
	}
	T* operator ->() const
	{
		return m_ptr.get();
	}
	void GetMinMaxInfo(LPMINMAXINFO pMinMaxInfo) const
	{
		m_ptr->GetMinMaxInfo(pMinMaxInfo);
	}
	distance MinDistance() const
	{
		return m_ptr->MinDistance();
	}
protected:
	double m_pos;
#ifdef USE_BOOST
	mutable boost::shared_ptr<T> m_ptr;
#else
	mutable std::auto_ptr<T> m_ptr;
#endif
};


struct IFrame
{
	typedef long position;
	typedef long distance;

	virtual  ~IFrame(){};
	virtual  HWND hwnd() const=0;
	operator HWND() const
	{
		return hwnd();
	}
	virtual bool AcceptDock(DFDOCKRECT* pHdr) const=0;
	virtual distance MinDistance() const=0;
	virtual void GetMinMaxInfo(LPMINMAXINFO pMinMaxInfo) const=0;

	virtual HDWP DeferFramePos(HDWP hdwp,long x1,long y1,long x2,long y2) const
	{
		return ::DeferWindowPos(hdwp,hwnd(),
								NULL,
								x1,y1,
								x2-x1,y2-y1,
								SWP_NOZORDER | SWP_NOACTIVATE);
	}
};


class CWindowPtrWrapper : public IFrame
{
public:
	CWindowPtrWrapper(HWND* phWnd):m_phWnd(phWnd)
	{
	}
	virtual HWND hwnd() const
	{
		return (*m_phWnd);
	}
	virtual bool AcceptDock(DFDOCKRECT* /*pHdr*/) const
	{
		return false;
	}
	virtual HDWP DeferFramePos(HDWP hdwp,long x1,long y1,long x2,long y2) const
	{
		if(*m_phWnd!=NULL)
			hdwp=::DeferWindowPos(hdwp,hwnd(),
									NULL,
									x1,y1,
									x2-x1,y2-y1,
									SWP_NOZORDER | SWP_NOACTIVATE);
		return hdwp;
	}
	void GetMinMaxInfo(LPMINMAXINFO pMinMaxInfo) const
	{
		if(*m_phWnd!=NULL)
		 ::SendMessage(hwnd(),WM_GETMINMAXINFO,NULL,reinterpret_cast<LPARAM>(pMinMaxInfo));
	}
	virtual distance MinDistance() const
	{
		MINMAXINFO mmInfo;
		ZeroMemory(&mmInfo,sizeof(MINMAXINFO));
		GetMinMaxInfo(&mmInfo);
		return mmInfo.ptMinTrackSize.x;;
	}
protected:
	HWND* m_phWnd;
};

//TImbeddedPackegeWnd
template<class TPackageFrame,class TTraits = CDockingWindowTraits >
class CSubWndFramesPackage :
		public CRect,
		public CWndFramesPackageBase<CPtrFrame<IFrame>,TTraits >
{
	typedef CPtrFrame<IFrame> CFrame;
	typedef TTraits CTraits;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本精品裸体写真集在线观看| 日韩精品一区二区三区在线| 欧美区一区二区三区| 欧美精品一级二级三级| 欧美日韩精品免费观看视频| 亚洲精品一线二线三线| 一区二区三区在线免费观看| 欧美主播一区二区三区| 精品国产三级电影在线观看| 一区二区三区不卡视频| 国产精品资源在线看| 欧美日韩一区 二区 三区 久久精品| 精品精品国产高清a毛片牛牛 | 色婷婷一区二区三区四区| 在线观看日韩电影| 中文字幕第一区综合| 久色婷婷小香蕉久久| 欧美精品三级在线观看| 亚洲综合丁香婷婷六月香| 国产又粗又猛又爽又黄91精品| 欧美成人精品3d动漫h| 亚洲第一福利一区| 欧美乱熟臀69xxxxxx| 夜夜揉揉日日人人青青一国产精品| av电影在线观看不卡| 欧美午夜精品一区二区蜜桃| 制服视频三区第一页精品| 一区二区欧美精品| 欧美日韩高清在线播放| 亚洲精品视频在线观看免费| 欧美色爱综合网| 午夜精品国产更新| 在线看国产一区| 日本中文一区二区三区| 精品国产乱码久久久久久牛牛| 日本一区中文字幕| 久久久久国产精品人| 99国产精品国产精品毛片| 亚洲成av人影院在线观看网| 免费成人美女在线观看| 91丨porny丨中文| 亚洲日本va在线观看| 91精品国产91综合久久蜜臀| 一区二区三区在线免费视频| 911精品产国品一二三产区| 国产一区在线视频| 亚洲动漫第一页| jiyouzz国产精品久久| 中文字幕一区二区三区在线播放| 成人午夜大片免费观看| 免费在线一区观看| 欧美最猛黑人xxxxx猛交| 日韩国产精品久久久久久亚洲| 国产亚洲美州欧州综合国| 欧美撒尿777hd撒尿| 成人国产精品免费观看动漫| 美女精品自拍一二三四| 亚洲自拍都市欧美小说| 亚洲猫色日本管| 欧美大片国产精品| 在线播放日韩导航| 91久久香蕉国产日韩欧美9色| 久久精品国产亚洲高清剧情介绍| 亚洲欧美电影一区二区| 日韩欧美亚洲一区二区| 欧美卡1卡2卡| 色综合久久精品| 本田岬高潮一区二区三区| 日一区二区三区| 亚洲另类色综合网站| 精品国产91久久久久久久妲己| 欧美人伦禁忌dvd放荡欲情| 欧美精品欧美精品系列| av一二三不卡影片| 91豆麻精品91久久久久久| 欧美日韩在线免费视频| 91精品国产综合久久婷婷香蕉 | 日本亚洲电影天堂| 久久超级碰视频| 成人黄色网址在线观看| 91天堂素人约啪| 欧美久久久久久蜜桃| 欧美在线播放高清精品| 欧美成人一区二区| 国产色婷婷亚洲99精品小说| 亚洲精品久久7777| 韩国三级中文字幕hd久久精品| 韩国午夜理伦三级不卡影院| 91在线精品秘密一区二区| 欧美性感一类影片在线播放| 欧美性videosxxxxx| 日本一区二区电影| 久久精品国产亚洲a| 欧美日韩视频在线观看一区二区三区| 国产欧美一区二区精品仙草咪| 午夜成人免费视频| 在线观看日产精品| 亚洲精品中文字幕乱码三区| 成人午夜在线视频| 国产成a人无v码亚洲福利| 成人h动漫精品一区二| 国产日韩欧美制服另类| 老司机午夜精品| 日韩欧美亚洲国产精品字幕久久久| 亚洲另类色综合网站| 色狠狠一区二区| 亚洲精品国产第一综合99久久| 99精品久久久久久| 亚洲精品欧美二区三区中文字幕| 色综合天天综合| 一区二区在线观看不卡| 色偷偷久久一区二区三区| 亚洲精品五月天| 91精品国产综合久久香蕉麻豆 | 日本不卡123| 精品国产免费视频| 国产一区二区不卡在线| 轻轻草成人在线| 色婷婷一区二区三区四区| 亚洲最色的网站| 91精品国产综合久久久久久久| 精品一区二区三区免费观看| 精品日本一线二线三线不卡| 高清视频一区二区| 亚洲最新视频在线观看| 欧美精品乱码久久久久久按摩| 麻豆精品视频在线| 椎名由奈av一区二区三区| 欧美日韩精品三区| 国产成人精品午夜视频免费| 亚洲六月丁香色婷婷综合久久 | 国产一区二区三区在线观看免费视频 | 亚洲资源在线观看| 欧美极品美女视频| 欧美欧美欧美欧美首页| aaa亚洲精品| 久久爱另类一区二区小说| 亚洲人成伊人成综合网小说| 精品裸体舞一区二区三区| 欧美视频精品在线| 99久久er热在这里只有精品15| 激情深爱一区二区| 亚洲chinese男男1069| 亚洲女性喷水在线观看一区| 久久先锋影音av鲁色资源网| 欧美精品一级二级三级| 欧洲亚洲精品在线| 91福利视频久久久久| 99久久久免费精品国产一区二区| 国产裸体歌舞团一区二区| 激情av综合网| 国产精品性做久久久久久| 麻豆91精品视频| 国产乱人伦偷精品视频不卡| 亚洲动漫第一页| 日韩高清在线一区| 水野朝阳av一区二区三区| 视频一区二区欧美| 裸体健美xxxx欧美裸体表演| 久草在线在线精品观看| 国产精品一二三区在线| 国产成人亚洲精品青草天美| 国产suv精品一区二区三区| av激情亚洲男人天堂| 欧美日韩在线三区| 国产不卡免费视频| 极品销魂美女一区二区三区| 国内成人精品2018免费看| 国产风韵犹存在线视精品| 99精品视频中文字幕| 欧美日韩精品系列| 久久久久久久性| 一区二区欧美视频| 国产综合久久久久影院| 色综合一区二区| 欧美成va人片在线观看| 亚洲毛片av在线| 精品一区二区三区在线观看国产| 成人免费看的视频| 91麻豆精品国产自产在线| 日本一区二区综合亚洲| 亚洲高清免费一级二级三级| 国产乱码字幕精品高清av| 欧美日韩一区视频| 国产精品国产自产拍高清av | 亚洲国产精品久久艾草纯爱 | 懂色一区二区三区免费观看| 在线一区二区三区四区| 国产欧美日韩精品a在线观看| 青青青伊人色综合久久| 色吧成人激情小说| 国产精品不卡在线| 久久99国产精品久久| 欧美美女黄视频| 亚洲成人中文在线| 欧美亚洲综合网| 夜夜精品视频一区二区| 欧美伊人久久大香线蕉综合69| 亚洲视频 欧洲视频| 97成人超碰视|