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

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

?? guidockcontext.cpp

?? 該文件包含有C8051單片機中實現UART波特率自檢的功能
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//-----------------------------------------------------------------------//
// This is a part of the GuiLib MFC Extention.							 //	
// Autor  :  Francisco Campos											 //
// (C) 2002 Francisco Campos <www.beyondata.com> All rights reserved     //
// This code is provided "as is", with absolutely no warranty expressed  //
// or implied. Any use is at your own risk.								 //		
// You must obtain the author's consent before you can include this code //
// in a software library.												 //
// If the source code in  this file is used in any application			 //
// then acknowledgement must be made to the author of this program		 //	
// fco_campos@tutopia.com													 //
//-----------------------------------------------------------------------//

#include "stdafx.h"
#include "..\header\GuiDockContext.h"
#include "..\header\GuiToolBarWnd.h"
#include "..\header\MenuBar.h"
#include "..\header\GuiControlBar.h"
#define _AfxGetDlgCtrlID(hWnd)          ((UINT)(WORD)::GetDlgCtrlID(hWnd))
#ifdef AFX_CORE3_SEG
#pragma code_seg(AFX_CORE3_SEG)
#endif

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define new DEBUG_NEW


#define HORZF(dw) (dw & CBRS_ORIENT_HORZ)
#define VERTF(dw) (dw & CBRS_ORIENT_VERT)

#define CX_BORDER   1
#define CY_BORDER   1

AFX_STATIC void AFXAPI _AfxGuiAdjustRectangle(CRect& rect, CPoint pt)
{
	int nXOffset = (pt.x < rect.left) ? (pt.x - rect.left) :
					(pt.x > rect.right) ? (pt.x - rect.right) : 0;
	int nYOffset = (pt.y < rect.top) ? (pt.y - rect.top) :
					(pt.y > rect.bottom) ? (pt.y - rect.bottom) : 0;
	rect.OffsetRect(nXOffset, nYOffset);
}

/////////////////////////////////////////////////////////////////////////////
// CGuiDockContext

CGuiDockContext::CGuiDockContext(CControlBar* pBar):CDockContext(pBar)
{
	bFirstClic=TRUE;
	bSecondClic=TRUE;
}

CGuiDockContext::~CGuiDockContext()
{
}






/////////////////////////////////////////////////////////////////////////////
// CGuiDockContext Drag Operations

void CGuiDockContext::StartDrag(CPoint pt)
{
	ASSERT_VALID(m_pBar);
	m_bDragging = TRUE;
	
	InitLoop();

	// GetWindowRect returns screen coordinates(not mirrored),
	// so if the desktop is mirrored then turn off mirroring
	// for the desktop dc so that we get correct focus rect drawn.
	// This layout change should be remembered, just in case ...

//	if (m_pDC->GetLayout() & LAYOUT_RTL)
//		m_pDC->SetLayout(LAYOUT_LTR);

	if (m_pBar->m_dwStyle & CBRS_SIZE_DYNAMIC)
	{
		// get true bar size (including borders)
		CRect rect;
		m_pBar->GetWindowRect(rect);
		m_ptLast = pt;
		CSize sizeHorz = m_pBar->CalcDynamicLayout(0, LM_HORZ | LM_HORZDOCK);
		CSize sizeVert = m_pBar->CalcDynamicLayout(0, LM_VERTDOCK);
		CSize sizeFloat = m_pBar->CalcDynamicLayout(0, LM_HORZ | LM_MRUWIDTH);

		m_rectDragHorz = CRect(rect.TopLeft(), sizeHorz);
		m_rectDragVert = CRect(rect.TopLeft(), sizeVert);

		// calculate frame dragging rectangle
		m_rectFrameDragHorz = CRect(rect.TopLeft(), sizeFloat);
		m_rectFrameDragVert = CRect(rect.TopLeft(), sizeFloat);

		CMiniFrameWnd::CalcBorders(&m_rectFrameDragHorz);
		CMiniFrameWnd::CalcBorders(&m_rectFrameDragVert);

//		m_rectFrameDragHorz.InflateRect(-afxData.cxBorder2, -afxData.cyBorder2);
//		m_rectFrameDragVert.InflateRect(-afxData.cxBorder2, -afxData.cyBorder2);
	}
	else if (m_pBar->m_dwStyle & CBRS_SIZE_FIXED)
	{
		// get true bar size (including borders)
		CRect rect;
		m_pBar->GetWindowRect(rect);
		m_ptLast = pt;
		CSize sizeHorz = m_pBar->CalcDynamicLayout(-1, LM_HORZ | LM_HORZDOCK);
		CSize sizeVert = m_pBar->CalcDynamicLayout(-1, LM_VERTDOCK);

		// calculate frame dragging rectangle
		m_rectFrameDragHorz = m_rectDragHorz = CRect(rect.TopLeft(), sizeHorz);
		m_rectFrameDragVert = m_rectDragVert = CRect(rect.TopLeft(), sizeVert);

		CMiniFrameWnd::CalcBorders(&m_rectFrameDragHorz);
		CMiniFrameWnd::CalcBorders(&m_rectFrameDragVert);
//		m_rectFrameDragHorz.InflateRect(-afxData.cxBorder2, -afxData.cyBorder2);
//		m_rectFrameDragVert.InflateRect(-afxData.cxBorder2, -afxData.cyBorder2);
	}
	else
	{
		// get true bar size (including borders)
		CRect rect;
		m_pBar->GetWindowRect(rect);
		m_ptLast = pt;
		BOOL bHorz = HORZF(m_dwStyle);
		DWORD dwMode = !bHorz ? (LM_HORZ | LM_HORZDOCK) : LM_VERTDOCK;
		CSize size = m_pBar->CalcDynamicLayout(-1, dwMode);

		// calculate inverted dragging rect
		if (bHorz)
		{
			m_rectDragHorz = rect;
			m_rectDragVert = CRect(CPoint(pt.x - rect.Height()/2, rect.top), size);
		}
		else // vertical orientation
		{
			m_rectDragVert = rect;
			m_rectDragHorz = CRect(CPoint(rect.left, pt.y - rect.Width()/2), size);
		}

		// calculate frame dragging rectangle
		m_rectFrameDragHorz = m_rectDragHorz;
		m_rectFrameDragVert = m_rectDragVert;

		CMiniFrameWnd::CalcBorders(&m_rectFrameDragHorz);
		CMiniFrameWnd::CalcBorders(&m_rectFrameDragVert);
//		m_rectFrameDragHorz.InflateRect(-afxData.cxBorder2, -afxData.cyBorder2);
//		m_rectFrameDragVert.InflateRect(-afxData.cxBorder2, -afxData.cyBorder2);
	}

	// adjust rectangles so that point is inside
	_AfxGuiAdjustRectangle(m_rectDragHorz, pt);
	_AfxGuiAdjustRectangle(m_rectDragVert, pt);
	_AfxGuiAdjustRectangle(m_rectFrameDragHorz, pt);
	_AfxGuiAdjustRectangle(m_rectFrameDragVert, pt);

	// initialize tracking state and enter tracking loop
	m_dwOverDockStyle = CanDock();
	Move(pt);   // call it here to handle special keys
	m_pDockSite->RecalcLayout();
	Track();
	m_pDockSite->RecalcLayout();
}

void CGuiDockContext::Move(CPoint pt)
{
	CPoint ptOffset = pt - m_ptLast;

	// offset all drag rects to new position
	m_rectDragHorz.OffsetRect(ptOffset);
	m_rectFrameDragHorz.OffsetRect(ptOffset);
	m_rectDragVert.OffsetRect(ptOffset);
	m_rectFrameDragVert.OffsetRect(ptOffset);
	m_ptLast = pt;

	// if control key is down don't dock
	m_dwOverDockStyle = m_bForceFrame ? 0 : CanDock();

	// update feedback

	DrawFocusRect();
}

void CGuiDockContext::OnKey(int nChar, BOOL bDown)
{
	if (nChar == VK_CONTROL)
		UpdateState(&m_bForceFrame, bDown);
	if (nChar == VK_SHIFT)
		UpdateState(&m_bFlip, bDown);
}

void CGuiDockContext::EndDrag()
{
	CancelLoop();

	if (m_dwOverDockStyle != 0)
	{
		CDockBar* pDockBar = GetDockBar(m_dwOverDockStyle);
		ASSERT(pDockBar != NULL);

		CRect rect = (m_dwOverDockStyle & CBRS_ORIENT_VERT) ?
			m_rectDragVert : m_rectDragHorz;

		UINT uID = _AfxGetDlgCtrlID(pDockBar->m_hWnd);
		if (uID >= AFX_IDW_DOCKBAR_TOP &&
			uID <= AFX_IDW_DOCKBAR_BOTTOM)
		{
			m_uMRUDockID = uID;
			m_rectMRUDockPos = rect;
			pDockBar->ScreenToClient(&m_rectMRUDockPos);
		}

		// dock it at the specified position, RecalcLayout will snap
		m_pDockSite->DockControlBar(m_pBar, pDockBar, &rect);
		m_pDockSite->RecalcLayout();
	}
	else if ((m_dwStyle & CBRS_SIZE_DYNAMIC) || (HORZF(m_dwStyle) && !m_bFlip) ||
			(VERTF(m_dwStyle) && m_bFlip))
	{
		m_dwMRUFloatStyle = CBRS_ALIGN_TOP | (m_dwDockStyle & CBRS_FLOAT_MULTI);
		m_ptMRUFloatPos = m_rectFrameDragHorz.TopLeft();
		m_pDockSite->FloatControlBar(m_pBar, m_ptMRUFloatPos, m_dwMRUFloatStyle);
	}
	else // vertical float
	{
		m_dwMRUFloatStyle = CBRS_ALIGN_LEFT | (m_dwDockStyle & CBRS_FLOAT_MULTI);
		m_ptMRUFloatPos = m_rectFrameDragVert.TopLeft();
		m_pDockSite->FloatControlBar(m_pBar, m_ptMRUFloatPos, m_dwMRUFloatStyle);
	}
	bFirstClic=TRUE;
	bSecondClic=TRUE;
	
}

/////////////////////////////////////////////////////////////////////////////
// CGuiDockContext Resize Operations

#define m_rectRequestedSize     m_rectDragHorz
#define m_rectActualSize        m_rectDragVert
#define m_rectActualFrameSize   m_rectFrameDragHorz
#define m_rectFrameBorders      m_rectFrameDragVert

void CGuiDockContext::StartResize(int nHitTest, CPoint pt)
{
	ASSERT_VALID(m_pBar);
	ASSERT(m_pBar->m_dwStyle & CBRS_SIZE_DYNAMIC);
	m_bDragging = FALSE;

	InitLoop();

	// GetWindowRect returns screen coordinates(not mirrored)
	// So if the desktop is mirrored then turn off mirroring
	// for the desktop dc so that we draw correct focus rect

//	if (m_pDC->GetLayout() & LAYOUT_RTL)
//		m_pDC->SetLayout(LAYOUT_LTR);

	// get true bar size (including borders)
	CRect rect;
	m_pBar->GetWindowRect(rect);
	m_ptLast = pt;
	m_nHitTest = nHitTest;

	CSize size = m_pBar->CalcDynamicLayout(0, LM_HORZ | LM_MRUWIDTH);
	m_rectRequestedSize = CRect(rect.TopLeft(), size);
	m_rectActualSize = CRect(rect.TopLeft(), size);
	m_rectActualFrameSize = CRect(rect.TopLeft(), size);

	// calculate frame rectangle
	CMiniFrameWnd::CalcBorders(&m_rectActualFrameSize);
//	m_rectActualFrameSize.InflateRect(-afxData.cxBorder2, -afxData.cyBorder2);

	m_rectFrameBorders = CRect(CPoint(0,0),
		m_rectActualFrameSize.Size() - m_rectActualSize.Size());

	// initialize tracking state and enter tracking loop
	m_dwOverDockStyle = 0;
	Stretch(pt);   // call it here to handle special keys
	Track();
}

void CGuiDockContext::Stretch(CPoint pt)
{
	CPoint ptOffset = pt - m_ptLast;

	// offset all drag rects to new position
	int nLength = 0;
	DWORD dwMode = LM_HORZ;
	if (m_nHitTest == HTLEFT || m_nHitTest == HTRIGHT)
	{
		if (m_nHitTest == HTLEFT)
			m_rectRequestedSize.left += ptOffset.x;
		else
			m_rectRequestedSize.right += ptOffset.x;
		nLength = m_rectRequestedSize.Width();
	}
	else
	{
		dwMode |= LM_LENGTHY;
		if (m_nHitTest == HTTOP)
			m_rectRequestedSize.top += ptOffset.y;
		else
			m_rectRequestedSize.bottom += ptOffset.y;
		nLength = m_rectRequestedSize.Height();
	}
	nLength = (nLength >= 0) ? nLength : 0;

	CSize size = m_pBar->CalcDynamicLayout(nLength, dwMode);

	CRect rectDesk;
	HWND hWndDesk = ::GetDesktopWindow();
	::GetWindowRect(hWndDesk, &rectDesk);
	CRect rectTemp = m_rectActualFrameSize;

	if (m_nHitTest == HTLEFT || m_nHitTest == HTTOP)
	{
		rectTemp.left = rectTemp.right -
			(size.cx + m_rectFrameBorders.Width());
		rectTemp.top = rectTemp.bottom -
			(size.cy + m_rectFrameBorders.Height());
		CRect rect;
		if (rect.IntersectRect(rectDesk, rectTemp))
		{
			m_rectActualSize.left = m_rectActualSize.right - size.cx;
			m_rectActualSize.top = m_rectActualSize.bottom - size.cy;
			m_rectActualFrameSize.left = rectTemp.left;
			m_rectActualFrameSize.top = rectTemp.top;
		}
	}
	else
	{
		rectTemp.right = rectTemp.left +
			(size.cx + m_rectFrameBorders.Width());
		rectTemp.bottom = rectTemp.top +
			(size.cy + m_rectFrameBorders.Height());
		CRect rect;
		if (rect.IntersectRect(rectDesk, rectTemp))
		{
			m_rectActualSize.right = m_rectActualSize.left + size.cx;
			m_rectActualSize.bottom = m_rectActualSize.top + size.cy;
			m_rectActualFrameSize.right = rectTemp.right;
			m_rectActualFrameSize.bottom = rectTemp.bottom;
		}
	}
	m_ptLast = pt;

	// update feedback
	DrawFocusRect();
}

void CGuiDockContext::EndResize()
{
	CancelLoop();

	m_pBar->CalcDynamicLayout(m_rectActualSize.Width(), LM_HORZ | LM_COMMIT);
	m_pDockSite->FloatControlBar(m_pBar, m_rectActualFrameSize.TopLeft(),
		CBRS_ALIGN_TOP | (m_dwDockStyle & CBRS_FLOAT_MULTI) | CBRS_SIZE_DYNAMIC);
}

/////////////////////////////////////////////////////////////////////////////
// CGuiDockContext Double Click Operations

void CGuiDockContext::ToggleDocking()
{
	if (m_pBar->IsFloating())
	{
		// Dock it only if is allowed to be docked
		if (m_pBar->m_dwDockStyle & CBRS_ALIGN_ANY)
		{
			ASSERT((m_uMRUDockID >= AFX_IDW_DOCKBAR_TOP &&
				m_uMRUDockID <= AFX_IDW_DOCKBAR_BOTTOM) ||
				m_uMRUDockID == 0);

			CRect rect = m_rectMRUDockPos;
			CDockBar* pDockBar = NULL;
			if (m_uMRUDockID != 0)
			{
				pDockBar = (CDockBar*)m_pDockSite->GetControlBar(m_uMRUDockID);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品视频自拍| 欧美精品一区二区三区很污很色的 | 99久久777色| 国产精品乡下勾搭老头1| 久久精品久久综合| 视频一区视频二区在线观看| 亚洲大片精品永久免费| 亚洲午夜三级在线| 丝袜美腿一区二区三区| 日韩二区三区四区| 久久成人18免费观看| 国产一区日韩二区欧美三区| 国产一区不卡精品| 成人黄色一级视频| 在线观看一区二区视频| 欧美日韩久久不卡| 精品国产免费久久| 国产精品人成在线观看免费| 亚洲精品美腿丝袜| 天堂在线一区二区| 国产精品一区二区三区网站| 国产福利一区二区| 在线观看成人免费视频| 91精品国产综合久久久久久久久久 | 色女孩综合影院| 国产精品不卡在线观看| 久久在线观看免费| 北岛玲一区二区三区四区| www.一区二区| 欧美日韩你懂的| 久久一日本道色综合| 一区二区三区 在线观看视频| 亚洲另类中文字| 久久精品国产一区二区三| 岛国精品在线播放| 欧美日韩一卡二卡| 国产午夜久久久久| 日韩国产在线一| 成人免费视频一区二区| 在线成人av网站| 亚洲欧洲日韩av| 久久97超碰色| 一本色道久久综合狠狠躁的推荐 | 久久综合久久鬼色中文字| 亚洲天堂福利av| 久久99蜜桃精品| 欧美日韩一区在线| 国产精品无人区| 久久精品二区亚洲w码| 在线观看免费亚洲| 中文子幕无线码一区tr| 奇米影视在线99精品| 91日韩在线专区| 国产清纯白嫩初高生在线观看91 | 亚洲国产精品嫩草影院| 国产mv日韩mv欧美| 日韩三级在线观看| 亚洲小说欧美激情另类| 99久久精品久久久久久清纯| 久久综合久久综合久久| 免费精品视频在线| 欧美区在线观看| 一二三四社区欧美黄| 91亚洲精品久久久蜜桃| 中文子幕无线码一区tr| 国产麻豆成人传媒免费观看| 日韩一级完整毛片| 日日嗨av一区二区三区四区| 精品视频一区二区不卡| 夜夜嗨av一区二区三区四季av| 成人福利视频在线| 中日韩av电影| 97久久精品人人做人人爽| 国产精品视频第一区| 大尺度一区二区| 国产精品国产三级国产普通话99| 国产精品一卡二卡| 国产欧美一区二区精品秋霞影院| 国产老肥熟一区二区三区| 久久网站最新地址| 国产九色sp调教91| 国产精品久久一卡二卡| 成人动漫av在线| 亚洲欧美国产77777| 色香色香欲天天天影视综合网| 亚洲色图视频免费播放| 91黄色免费版| 午夜精品久久久久久久99樱桃 | 麻豆久久久久久| 日韩一级精品视频在线观看| 蜜臀91精品一区二区三区 | 国产精品沙发午睡系列990531| 国产成人av一区二区三区在线| 国产精品欧美经典| 欧美色网一区二区| 裸体歌舞表演一区二区| 久久久国产精品午夜一区ai换脸| jlzzjlzz欧美大全| 亚洲第一久久影院| 精品国产乱码91久久久久久网站| 国产精品1区2区3区在线观看| 国产精品国产三级国产普通话三级| 99国产精品久久久久久久久久久 | 欧美日韩精品福利| 久久99最新地址| 亚洲免费观看在线视频| 日韩欧美国产精品| 99久久99久久久精品齐齐| 天堂精品中文字幕在线| 国产偷国产偷精品高清尤物| 91久久精品日日躁夜夜躁欧美| 天天影视色香欲综合网老头| 亚洲国产精品v| 欧美日韩高清一区二区三区| 国产精品18久久久久久vr| 亚洲一区二区三区国产| 中文字幕不卡在线播放| 911精品国产一区二区在线| 成人免费视频一区| 日本欧美一区二区在线观看| 日韩美女视频19| 7777精品久久久大香线蕉| 99精品欧美一区| 一区二区三区在线播| 久久精品这里都是精品| 欧美日韩色一区| 91网站在线播放| 成人免费视频国产在线观看| 欧美激情综合五月色丁香| 日韩三级.com| 欧美精三区欧美精三区| 色美美综合视频| 成人免费观看av| 国内精品视频666| 免费高清在线一区| 亚洲成人动漫精品| 一区二区三区视频在线观看 | 色悠悠久久综合| 福利一区二区在线观看| 韩日精品视频一区| 欧美aaaaaa午夜精品| 亚洲h动漫在线| 亚洲一区二区欧美日韩 | 欧美二区乱c少妇| 91免费观看在线| av爱爱亚洲一区| 99久久精品一区二区| 不卡的电视剧免费网站有什么| 国产一区欧美二区| 国产成人av影院| 国产高清不卡二三区| 国产精品一区一区三区| 国产乱人伦偷精品视频不卡| 九色综合国产一区二区三区| 麻豆成人久久精品二区三区小说| 日韩精品免费视频人成| 日本欧美一区二区在线观看| 日本欧美一区二区三区乱码| 日韩国产精品久久久久久亚洲| 午夜电影一区二区| 欧美aaaaaa午夜精品| 九色综合狠狠综合久久| 国产精品一区二区x88av| 国产精品资源站在线| av在线综合网| 欧美中文字幕不卡| 欧美精品久久一区二区三区| 欧美一卡二卡三卡| 日本一区二区综合亚洲| 中文字幕佐山爱一区二区免费| 亚洲免费资源在线播放| 午夜影院在线观看欧美| 久久精品国产亚洲高清剧情介绍| 国内不卡的二区三区中文字幕| 成人午夜电影小说| 日本韩国精品一区二区在线观看| 欧美在线看片a免费观看| 欧美久久免费观看| 国产亚洲精品aa午夜观看| 亚洲精品老司机| 久久国产日韩欧美精品| 成人av电影在线网| 欧美四级电影在线观看| 26uuu国产在线精品一区二区| 国产女同互慰高潮91漫画| 亚洲一卡二卡三卡四卡无卡久久| 另类综合日韩欧美亚洲| 色呦呦网站一区| 精品入口麻豆88视频| 亚洲激情图片qvod| 精品在线观看视频| 91九色02白丝porn| 国产欧美日韩视频在线观看| 亚洲一卡二卡三卡四卡五卡| 国产精品99久久久久| 欧美日韩国产综合一区二区三区| 国产女人水真多18毛片18精品视频| 亚洲国产综合人成综合网站| 成人av在线影院| 欧美zozozo|