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

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

?? dockingwindow.h

?? 一款最完整的工業組態軟源代碼
?? H
?? 第 1 頁 / 共 3 頁
字號:
	{
		assert(!IsDocking());
		m_hBarOwner=hBar;
	}
	void OnUndocked(HDOCKBAR /*hBar*/)
	{
		assert(IsDocking());
		m_hBarOwner=HNONDOCKBAR;
	}
////////////////messages handlers/////////////////////////////////
	BEGIN_MSG_MAP(thisClass)
		MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground)
		MESSAGE_HANDLER(WM_CLOSE, OnClose)
        MESSAGE_HANDLER(WM_NCLBUTTONDOWN,OnNcLButtonDown)
		MESSAGE_HANDLER(WM_WINDOWPOSCHANGED, OnWindowPosChanged)
		MESSAGE_HANDLER(WMDF_NDOCKSTATECHANGED,OnDockStateChanged)
		MESSAGE_HANDLER(WM_MENUCHAR,OnMenuChar)
	END_MSG_MAP()

	LRESULT OnEraseBackground(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
	{
		return 1;
	}

	LRESULT OnWindowPosChanged(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& bHandled)
	{
		LPWINDOWPOS pWPos=reinterpret_cast<LPWINDOWPOS>(lParam);

		if(
			(pWPos->flags&SWP_SHOWWINDOW
			|| ((pWPos->flags&(SWP_NOSIZE | SWP_NOMOVE))!=(SWP_NOSIZE | SWP_NOMOVE)))
				&& !IsDocking()
					&& IsWindowVisible()
						/*&& !(pWPos->flags&SWP_HIDEWINDOW)*/)
		{
			m_rcUndock.left=pWPos->x;
			m_rcUndock.top=pWPos->y;
			m_rcUndock.right=m_rcUndock.left+pWPos->cx;
			m_rcUndock.bottom=m_rcUndock.top+pWPos->cy;
		}
		bHandled = FALSE;
		return 0;
	}

	LRESULT OnClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM/* lParam*/, BOOL& bHandled)
	{
		T* pThis=reinterpret_cast<T*>(this);
		bHandled=!pThis->OnClosing();
		return !bHandled;
	}

    LRESULT OnNcLButtonDown(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
		bHandled=(wParam==HTCAPTION);
        if(bHandled)
        {
			SetWindowPos(HWND_TOP,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE );
			POINT pt = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) };
			if(::DragDetect(m_hWnd,pt))
			{
				T* pThis=static_cast<T*>(this);
				pThis->ScreenToClient(&pt);
				pThis->BeginMoving(pt);
			}
        }
        return 0;
    }

	LRESULT OnDockStateChanged(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
	{
         T* pThis=static_cast<T*>(this);
		if(wParam!=FALSE)
			pThis->OnDocked(reinterpret_cast<HDOCKBAR>(lParam),(DOCKED2HORIZONTAL(wParam)==TRUE));
		else
			pThis->OnUndocked(reinterpret_cast<HDOCKBAR>(lParam));
		return TRUE;
	}

	LRESULT OnMenuChar(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
	{
		LRESULT lRes = DefWindowProc(uMsg, wParam, lParam);
		if( HIWORD(lRes) == MNC_IGNORE ) {
			return ::SendMessage(this->GetTopLevelParent(), uMsg, wParam, lParam);
		}
		return lRes;
	}
protected:
	CDocker		m_docker;
	HDOCKBAR	m_hBarOwner;
	CRect		m_rcUndock;
};

template<class T>
class CDockingWindowPlacement : public DFDOCKPOS
{
public:
	CDockingWindowPlacement(T& dw)
		:DFDOCKPOS(0),m_dw(dw)
	{
		hdr.hBar=HNONDOCKBAR;
	}
	bool IsVisible() const
	{
		assert(::IsWindow(dw.m_hWnd));
		return (m_dw.IsWindowVisible()!=FALSE);
	}
	bool IsDocking() const
	{
		assert(::IsWindow(dw.m_hWnd));
		return m_dw.IsDocking();
	}
	bool Hide()
	{
		assert(::IsWindow(dw.m_hWnd));
		bool bRes=true;
		if(m_dw.IsDocking())
		{
			bRes=m_dw.GetDockingPosition(this);
			assert(bRes);
			if(bRes)
				bRes=m_dw.Undock();
			assert(bRes);
		}
		else
			hdr.hBar=HNONDOCKBAR;
		return (bRes && m_dw.ShowWindow(SW_HIDE));
	}
	bool Show()
	{
		assert(::IsWindow(dw.m_hWnd));
		bool bRes=true;
		if(hdr.hBar!=HNONDOCKBAR)
			bRes=m_dw.SetDockingPosition(this);
		else
			m_dw.ShowWindow(SW_SHOW);
		assert(bRes);
		return bRes;
	}
	CDockingWindowPlacement& operator = (const DFDOCKPOS& pos)
	{
		dwDockSide=pos.dwDockSide;
		nBar=pos.nBar;
		fPctPos=pos.fPctPos;
		nWidth=pos.nWidth;
		nHeight=pos.nHeight;
		return *this;
	}
protected:
	T&	m_dw;
};

class CCaptionBase : public COrientedRect
{
	typedef COrientedRect baseClass;
public:
	struct CButton: CRect
	{
        virtual void CalculateRect(CRect& rc,bool bHorizontal)=0;
		virtual void Draw (CDC& dc)=0;
		virtual void Press(HWND /*hWnd*/){};
		virtual void Release(HWND /*hWnd*/){};
		virtual void Hot(HWND /*hWnd*/){}
	};

	class CBtnClickTracker : public CDDTrackerBaseT<CBtnClickTracker>
	{
	public:
		CBtnClickTracker(HWND hWnd,CButton& btn)
			:m_hWnd(hWnd),m_btn(btn)
		{
		}
		void BeginDrag()
		{
			m_btn.Press(m_hWnd);
		}
		void EndDrag(bool /*bCanceled*/)
		{
			m_btn.Release(m_hWnd);
		}
	protected:
		HWND		m_hWnd;
		CButton&	m_btn;
	};
protected:
	template<class T>
	class CHotBtnTracker : public CDDTrackerBaseT<CHotBtnTracker<T> >
	{
	public:
		CHotBtnTracker(CButton& btn,T& owner,HWND hWnd,int nHotHitTest)
			:m_btn(btn),m_owner(owner),m_hWnd(hWnd),m_nHotHitTest(nHotHitTest),m_bDoAction(false)
		{
			CRect rc;
			::GetClientRect(m_hWnd,&rc);
			m_offset.x=rc.left;
			m_offset.y=rc.top;
			::ClientToScreen(m_hWnd,&m_offset);
			::GetWindowRect(hWnd,&rc);
			m_offset.x-=rc.left;
			m_offset.y-=rc.top;
		}
		void BeginDrag()
		{
			m_btn.Hot(m_hWnd);
		}
		void EndDrag(bool /*bCanceled*/)
		{
			m_btn.Release(m_hWnd);
		}

		void OnDropLeftButton(long x, long y)
		{
			CPoint pt(x+m_offset.x,y+m_offset.y);
			m_bDoAction=(m_owner.HitTest(pt)==m_nHotHitTest);

		}
		void OnMove(long x, long y)
		{
			CPoint pt(x+m_offset.x,y+m_offset.y);
			if(m_owner.HitTest(pt)!=m_nHotHitTest)
				::ReleaseCapture();
		}
		bool ProcessWindowMessage(MSG* pMsg)
		{
			bool bRes=false;
			bRes=(pMsg->message==WM_LBUTTONDOWN);
			if(bRes)
				m_btn.Press(m_hWnd);
			return bRes;
		}

		operator bool () const
		{
			return m_bDoAction;
		}
	protected:
		bool		m_bDoAction;
		CPoint		m_offset;
		T&			m_owner;
		CButton&	m_btn;
		HWND		m_hWnd;
		int			m_nHotHitTest;
	};
public:
	CCaptionBase(bool bHorizontal=true)
		:COrientedRect(bHorizontal,::GetSystemMetrics(SM_CYSMCAPTION))
	{
	}
	CCaptionBase(unsigned long thickness,bool bHorizontal=true)
		:COrientedRect(bHorizontal,thickness)
	{
	}

	bool CalculateRect(CRect& rc,bool bTop)
	{
		return baseClass::CalculateRect(rc,bTop);
	}
	LRESULT HitTest(const CPoint& /*pt*/) const
	{
		return HTNOWHERE;
	}
	void Draw(HWND /*hWnd*/,CDC& dc)
	{
		dc.FillRect(this,(HBRUSH)LongToPtr(COLOR_3DFACE + 1));
	}
	bool OnAction(HWND hWnd,unsigned int nHitTest)
	{
		return HotTrack(hWnd,nHitTest);
	}
	bool HotTrack(HWND /*hWnd*/,unsigned int /*nHitTest*/)
	{
		return false;
	}
	void UpdateMetrics()
	{
		// Override in derived class if it depends on system metrics
	}
};


template <class TCaption,DWORD t_dwStyle = 0, DWORD t_dwExStyle = 0>
struct CDockingWindowTraits : CDockingBarWinTraits<t_dwStyle,t_dwExStyle>
{
	typedef TCaption CCaption;
};

typedef CDockingWindowTraits<CCaptionBase,WS_OVERLAPPEDWINDOW | WS_POPUP/* WS_CHILD*/ | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,WS_EX_TOOLWINDOW/* WS_EX_CLIENTEDGE*/> CEmptyTitleDockingWindowTraits;

template <class T,
          class TBase = CWindow,
          class TDockingWinTraits = CEmptyTitleDockingWindowTraits>
class ATL_NO_VTABLE CTitleDockingWindowBaseImpl :
	public CDockingWindowBaseImpl< T, TBase, TDockingWinTraits >
{
    typedef CDockingWindowBaseImpl< T, TBase, TDockingWinTraits >		baseClass;
    typedef CTitleDockingWindowBaseImpl< T, TBase, TDockingWinTraits >	thisClass;
protected:
	typedef typename TDockingWinTraits::CCaption	CCaption;
public:
	LRESULT NcHitTest(const CPoint& pt)
	{
		LRESULT lRes=m_caption.HitTest(pt);
		if(lRes==HTNOWHERE)
				lRes=HTCLIENT;
		else
		{
			if(GetCapture()==NULL)
				m_caption.HotTrack(m_hWnd,lRes);
		}
		return lRes;
	}

	void GetMinMaxInfo(LPMINMAXINFO pMinMaxInfo) const
	{
		long width=m_caption.GetThickness();
		if(pMinMaxInfo->ptMinTrackSize.y<width)
			pMinMaxInfo->ptMinTrackSize.y=width;
		if(pMinMaxInfo->ptMinTrackSize.x<width)
			pMinMaxInfo->ptMinTrackSize.x=width;
	}

	void NcCalcSize(CRect* pRc)
	{
		DWORD style = GetWindowLong(GWL_STYLE);
		if((style&WS_CAPTION)==0)
			m_caption.SetRectEmpty();
		else
			m_caption.CalculateRect(*pRc,true);
	}
	void NcDraw(CDC& dc)
	{
		DWORD style = GetWindowLong(GWL_STYLE);
		if((style&WS_CAPTION)!=0)
			m_caption.Draw(m_hWnd,dc);
	}
	void OnDocked(HDOCKBAR hBar,bool bHorizontal)
	{
		m_caption.SetOrientation(!bHorizontal);
		baseClass::OnDocked(hBar,bHorizontal);
	}
	void OnUndocked(HDOCKBAR hBar)
	{
		m_caption.SetOrientation(true);
		baseClass::OnUndocked(hBar);
	}
	bool CloseBtnPress()
	{
		PostMessage(WM_CLOSE);
		return false;
	}
#ifdef DF_AUTO_HIDE_FEATURES
	bool PinUp(const CDockingSide& side)
	{
		CRect rc;
		GetWindowRect(&rc);
		T* pThis=static_cast<T*>(this);
		assert(rc.Width()>0);
		assert(rc.Height()>0);
		return pThis->PinUp(side,(side.IsHorizontal() ? rc.Width() : rc.Height()));
	}

	bool PinUp(const CDockingSide& side,unsigned long width,bool bVisualize=false)
	{
		if(IsDocking())
					Undock();
		DFPINUP pinHdr;
		pinHdr.hdr.hWnd=m_hWnd;
		pinHdr.hdr.hBar=GetOwnerDockingBar();
//		pinHdr.hdr.code=DC_PINUP;
		pinHdr.dwDockSide=side;
		pinHdr.nWidth=width;
		pinHdr.dwFlags= bVisualize ? DFPU_VISUALIZE : 0 ;
		pinHdr.n=0;
		return m_docker.PinUp(&pinHdr);
	}

	bool PinBtnPress(bool bVisualize=true)
	{
		assert(IsDocking());
		DFDOCKPOS dockHdr={0};
//		dockHdr.hdr.code=DC_GETDOCKPOSITION;
		dockHdr.hdr.hWnd=m_hWnd;
		dockHdr.hdr.hBar=GetOwnerDockingBar();
		bool bRes=GetDockingPosition(&dockHdr);
		if(bRes)
		{
			bRes=Undock();
			if(bRes)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
捆绑变态av一区二区三区| 国产精品免费看片| 人人超碰91尤物精品国产| 51精品秘密在线观看| 久久er精品视频| 国产亚洲精品aa| av在线播放不卡| 五月天欧美精品| 日韩你懂的在线观看| 精品一区二区三区免费毛片爱| 久久久久一区二区三区四区| 丁香激情综合国产| 亚洲一本大道在线| 欧美日韩不卡在线| 国产一区二区三区不卡在线观看| 国产精品私人自拍| 欧美亚洲一区三区| 麻豆传媒一区二区三区| 国产精品三级av在线播放| 欧美性生活影院| 国产一二精品视频| 亚洲人一二三区| 91精品国产欧美日韩| 粉嫩嫩av羞羞动漫久久久| 亚洲精品国产一区二区三区四区在线| 在线播放视频一区| 成人深夜在线观看| 天天综合日日夜夜精品| 国产精品天天摸av网| 91麻豆精品国产91久久久使用方法 | 午夜国产不卡在线观看视频| 337p粉嫩大胆色噜噜噜噜亚洲| 99精品久久久久久| 毛片av一区二区| 一个色妞综合视频在线观看| 久久久国产精华| 欧美日韩1234| av成人动漫在线观看| 久久精品国产久精国产| 亚洲精品免费一二三区| 久久久国际精品| 欧美一区二区私人影院日本| 色综合色综合色综合色综合色综合 | 亚洲最大的成人av| 中文字幕乱码久久午夜不卡| 欧美一级一级性生活免费录像| 91首页免费视频| 国产99久久久国产精品免费看| 丝瓜av网站精品一区二区| 成人欧美一区二区三区黑人麻豆| 欧美一级日韩免费不卡| 欧美性感一区二区三区| 99视频精品在线| 国产精品一区二区在线观看网站| 奇米精品一区二区三区在线观看一 | 91久久一区二区| 高清不卡在线观看av| 国产在线国偷精品免费看| 蜜臀精品久久久久久蜜臀| 一卡二卡三卡日韩欧美| 亚洲乱码国产乱码精品精的特点| 国产精品麻豆久久久| 国产午夜三级一区二区三| 欧美tk丨vk视频| 日韩美女视频在线| 91精品国产综合久久蜜臀| 欧美丰满嫩嫩电影| 欧美日韩午夜在线视频| 在线观看日韩一区| 91美女片黄在线| 99精品视频在线播放观看| 99综合影院在线| 99热精品一区二区| www.成人网.com| 91免费国产视频网站| 9i在线看片成人免费| 97精品久久久久中文字幕| 99久久精品免费精品国产| 99久久综合精品| 99精品久久久久久| 色系网站成人免费| 精品视频一区二区不卡| 欧美精品一卡两卡| 制服.丝袜.亚洲.中文.综合| 日韩欧美国产综合在线一区二区三区| 欧美一区二区精品在线| 精品日韩在线观看| 欧美精彩视频一区二区三区| 国产精品国产精品国产专区不蜜| 亚洲私人黄色宅男| 一区二区三区视频在线观看 | 丝袜脚交一区二区| 久久99国产精品成人| 国产精品一区不卡| 97国产一区二区| 欧美日韩一区二区三区在线看| 91精品午夜视频| 久久久久久久网| 亚洲四区在线观看| 日精品一区二区三区| 国产一区在线看| 色综合久久久久久久久久久| 欧美日韩国产a| 久久久亚洲高清| 亚洲精品一二三四区| 亚洲va韩国va欧美va| 精品一区二区三区在线播放视频 | 蜜臀av一区二区三区| 国产盗摄视频一区二区三区| 色激情天天射综合网| 日韩一级片网站| 欧美国产精品中文字幕| 亚洲国产一二三| 激情欧美一区二区| 91激情五月电影| 久久精品人人做| 一区二区免费视频| 粉嫩av亚洲一区二区图片| 91啪在线观看| 日韩一区二区三区精品视频| 日韩一区欧美小说| 精品一区二区影视| 在线观看成人免费视频| 久久男人中文字幕资源站| 亚洲成人激情自拍| 成人理论电影网| 精品国产伦一区二区三区免费| 亚洲色图制服诱惑| 国产乱淫av一区二区三区| 911精品国产一区二区在线| 久久精品一区二区三区不卡牛牛 | 日韩欧美不卡一区| 亚洲免费观看高清完整版在线| 麻豆精品在线视频| 在线观看国产精品网站| 国产欧美日韩精品一区| 日本美女一区二区| 91丨九色丨黑人外教| 国产欧美一区二区三区在线看蜜臀 | 风流少妇一区二区| 欧美一级夜夜爽| 亚洲电影一区二区三区| 成人污污视频在线观看| 欧美电视剧免费全集观看| 亚洲一级二级在线| 99免费精品在线观看| 欧美国产激情一区二区三区蜜月| 美女高潮久久久| 这里只有精品视频在线观看| 亚洲五码中文字幕| 在线亚洲一区二区| 亚洲精品视频在线看| 不卡一区二区三区四区| 国产亚洲欧美激情| 国产精品一区二区你懂的| 日韩视频免费观看高清完整版 | 日韩av一区二区三区四区| 欧美亚洲综合一区| 亚洲影视资源网| 91黄色激情网站| 一区二区三区免费观看| 色综合久久中文字幕| 亚洲啪啪综合av一区二区三区| av中文字幕在线不卡| 国产精品超碰97尤物18| 99久久精品国产网站| 亚洲啪啪综合av一区二区三区| 成人av网址在线| 亚洲人被黑人高潮完整版| 色婷婷国产精品综合在线观看| 亚洲精品视频免费看| 色偷偷一区二区三区| 亚洲小少妇裸体bbw| 在线播放亚洲一区| 精品一区精品二区高清| 精品国产1区二区| 国产精品伊人色| 国产精品成人一区二区艾草 | 99在线精品视频| 综合av第一页| 欧美日韩一级二级| 日本美女一区二区| 久久男人中文字幕资源站| 不卡一二三区首页| 亚洲综合色视频| 555夜色666亚洲国产免| 免费观看一级欧美片| 国产午夜精品久久久久久久| 成人国产精品视频| 亚洲综合免费观看高清完整版在线 | 欧美制服丝袜第一页| 亚洲成人动漫一区| 日韩无一区二区| 国产伦精品一区二区三区在线观看| 久久精品亚洲乱码伦伦中文 | 国产精品18久久久久久久久| 中文欧美字幕免费| 欧美日韩美女一区二区| 国产乱人伦偷精品视频不卡| 亚洲女同女同女同女同女同69|