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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gfxsplitterwnd.cpp

?? 大家共同進步! 大家共同進步! 大家共同進步!
?? CPP
字號:
// Copyright (c) Iuri Apollonio 1998
// Use & modify as you want & need, and leave those 3 lines.
// http://www.codeguru.com


// GfxSplitterWnd.cpp: implementation of the CGfxSplitterWnd class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "GfxSplitterWnd.h"

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

#define CX_BORDER   1
#define CY_BORDER   1

#include <afxpriv.h>

static BOOL bNotWin4;

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

BEGIN_MESSAGE_MAP(CGfxSplitterWnd, CSplitterWnd)
	//{{AFX_MSG_MAP(CGfxSplitterWnd)
	ON_WM_ERASEBKGND()
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

CGfxSplitterWnd::CGfxSplitterWnd()
{
	m_cxBorder = 0;
	m_cyBorder = 0;
	m_cxSplitter = m_cySplitter = 2 + 2;
	m_cxSplitterGap = m_cySplitterGap = 2 + 2;


	DWORD dwVersion = ::GetVersion();
	BOOL bWin4 = (BYTE)dwVersion >= 4;
	bNotWin4 = 1 - bWin4;   // for convenience

	m_upBorder = 8;
	bWhiteLine = true;
}

CGfxSplitterWnd::~CGfxSplitterWnd()
{

}

void CGfxSplitterWnd::OnDrawSplitter(CDC* pDC, ESplitType nType, const CRect& rectArg)
{
	if (pDC == NULL)
	{
		RedrawWindow(rectArg, NULL, RDW_INVALIDATE|RDW_NOCHILDREN);
		return;
	}
	ASSERT_VALID(pDC);
	CRect rect = rectArg;
	switch (nType)
	{
	case splitBorder:
		return;
	case splitBox:
		pDC->Draw3dRect(rect, GetSysColor(COLOR_3DFACE), GetSysColor(COLOR_WINDOWFRAME));
		rect.InflateRect(-CX_BORDER, -CY_BORDER);
		pDC->Draw3dRect(rect, GetSysColor(COLOR_BTNHIGHLIGHT), GetSysColor(COLOR_BTNSHADOW));
		rect.InflateRect(-CX_BORDER, -CY_BORDER);
		break;
	}

	COLORREF clr = GetSysColor(COLOR_3DFACE);
	pDC->FillSolidRect(rect, clr);
}

void CGfxSplitterWnd::OnInvertTracker(const CRect & rect)
{
	ASSERT_VALID(this);
	ASSERT(!rect.IsRectEmpty());
	ASSERT((GetStyle() & WS_CLIPCHILDREN) == 0);
	CDC* pDC = GetDC();
	CBrush* pBrush = CBrush::FromHandle((HBRUSH) GetStockObject(WHITE_BRUSH));
	HBRUSH hOldBrush = NULL;
	if (pBrush != NULL) hOldBrush = (HBRUSH)SelectObject(pDC->m_hDC, pBrush->m_hObject);
	pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATINVERT);
	if (hOldBrush != NULL) SelectObject(pDC->m_hDC, hOldBrush);
	ReleaseDC(pDC);
}

// repositions client area of specified window
// assumes everything has WS_BORDER or is inset like it does
//  (includes scroll bars)
static void AFXAPI DeferClientPos(AFX_SIZEPARENTPARAMS* lpLayout,
	CWnd* pWnd, int x, int y, int cx, int cy, BOOL bScrollBar)
{
	ASSERT(pWnd != NULL);
	ASSERT(pWnd->m_hWnd != NULL);

	if (bScrollBar)
	{
		// if there is enough room, draw scroll bar without border
		// if there is not enough room, set the WS_BORDER bit so that
		//   we will at least get a proper border drawn
		BOOL bNeedBorder = (cx <= CX_BORDER || cy <= CY_BORDER);
		pWnd->ModifyStyle(bNeedBorder ? 0 : WS_BORDER,
			bNeedBorder ? WS_BORDER : 0);
	}
	CRect rect(x, y, x+cx, y+cy);

	// adjust for border size (even if zero client size)

	// adjust for 3d border (splitter windows have implied border)
	if ((pWnd->GetExStyle() & WS_EX_CLIENTEDGE) ||
		  pWnd->IsKindOf(RUNTIME_CLASS(CSplitterWnd)))
		rect.InflateRect(CX_BORDER*2, CY_BORDER*2);

	// first check if the new rectangle is the same as the current
	CRect rectOld;
	pWnd->GetWindowRect(rectOld);
	pWnd->GetParent()->ScreenToClient(&rectOld);
	if (rect != rectOld)
		AfxRepositionWindow(lpLayout, pWnd->m_hWnd, rect);
}


static void AFXAPI LayoutRowCol(CSplitterWnd::CRowColInfo* pInfoArray,
	int nMax, int nSize, int nSizeSplitter)
{
	ASSERT(pInfoArray != NULL);
	ASSERT(nMax > 0);
	ASSERT(nSizeSplitter > 0);

	CSplitterWnd::CRowColInfo* pInfo;
	int i;

	if (nSize < 0)
		nSize = 0;  // if really too small, layout as zero size

	// start with ideal sizes
	for (i = 0, pInfo = pInfoArray; i < nMax-1; i++, pInfo++)
	{
		if (pInfo->nIdealSize < pInfo->nMinSize)
			pInfo->nIdealSize = 0;      // too small to see
		pInfo->nCurSize = pInfo->nIdealSize;
	}
	pInfo->nCurSize = INT_MAX;  // last row/column takes the rest

	for (i = 0, pInfo = pInfoArray; i < nMax; i++, pInfo++)
	{
		ASSERT(nSize >= 0);
		if (nSize == 0)
		{
			// no more room (set pane to be invisible)
			pInfo->nCurSize = 0;
			continue;       // don't worry about splitters
		}
		else if (nSize < pInfo->nMinSize && i != 0)
		{
			// additional panes below the recommended minimum size
			//   aren't shown and the size goes to the previous pane
			pInfo->nCurSize = 0;

			// previous pane already has room for splitter + border
			//   add remaining size and remove the extra border
			ASSERT(CX_BORDER*2 == CY_BORDER*2);
			(pInfo-1)->nCurSize += nSize + CX_BORDER*2;
			nSize = 0;
		}
		else
		{
			// otherwise we can add the second pane
			ASSERT(nSize > 0);
			if (pInfo->nCurSize == 0)
			{
				// too small to see
				if (i != 0)
					pInfo->nCurSize = 0;
			}
			else if (nSize < pInfo->nCurSize)
			{
				// this row/col won't fit completely - make as small as possible
				pInfo->nCurSize = nSize;
				nSize = 0;
			}
			else
			{
				// can fit everything
				nSize -= pInfo->nCurSize;
			}
		}

		// see if we should add a splitter
		ASSERT(nSize >= 0);
		if (i != nMax - 1)
		{
			// should have a splitter
			if (nSize > nSizeSplitter)
			{
				nSize -= nSizeSplitter; // leave room for splitter + border
				ASSERT(nSize > 0);
			}
			else
			{
				// not enough room - add left over less splitter size
				ASSERT(CX_BORDER*2 == CY_BORDER*2);
				pInfo->nCurSize += nSize;
				if (pInfo->nCurSize > (nSizeSplitter - CX_BORDER*2))
					pInfo->nCurSize -= (nSizeSplitter - CY_BORDER*2);
				nSize = 0;
			}
		}
	}
	ASSERT(nSize == 0); // all space should be allocated
}

void CGfxSplitterWnd::RecalcLayout()
{
	ASSERT_VALID(this);
	ASSERT(m_nRows > 0 && m_nCols > 0); // must have at least one pane

	CRect rectClient;
	GetClientRect(rectClient);
	rectClient.InflateRect(-m_cxBorder, -m_cyBorder);
	rectClient.top += m_upBorder;

	CRect rectInside;
	GetInsideRect(rectInside);

	// layout columns (restrict to possible sizes)
	LayoutRowCol(m_pColInfo, m_nCols, rectInside.Width(), m_cxSplitterGap);
	LayoutRowCol(m_pRowInfo, m_nRows, rectInside.Height(), m_cySplitterGap);

	// adjust the panes (and optionally scroll bars)

	// give the hint for the maximum number of HWNDs
	AFX_SIZEPARENTPARAMS layout;
	layout.hDWP = ::BeginDeferWindowPos((m_nCols + 1) * (m_nRows + 1) + 1);

	// size of scrollbars
	int cx = (rectClient.right - rectInside.right - bNotWin4);// - afxData.bNotWin4;
	int cy = (rectClient.bottom - rectInside.bottom - bNotWin4);// - afxData.bNotWin4;

	// reposition size box
	if (m_bHasHScroll && m_bHasVScroll)
	{
		CWnd* pScrollBar = GetDlgItem(AFX_IDW_SIZE_BOX);
		ASSERT(pScrollBar != NULL);

		// fix style if necessary
		BOOL bSizingParent = (GetSizingParent() != NULL);
		// modifyStyle returns TRUE if style changes
		if (pScrollBar->ModifyStyle(SBS_SIZEGRIP|SBS_SIZEBOX,
				bSizingParent ? SBS_SIZEGRIP : SBS_SIZEBOX))
			pScrollBar->Invalidate();
		pScrollBar->EnableWindow(bSizingParent);

		// reposition the size box
		DeferClientPos(&layout, pScrollBar,
			rectInside.right + bNotWin4,
			rectInside.bottom + bNotWin4, cx, cy, TRUE);
	}

	// reposition scroll bars
	if (m_bHasHScroll)
	{
		int cxSplitterBox = m_cxSplitter + bNotWin4;// split box bigger
		int x = rectClient.left;
		int y = rectInside.bottom + bNotWin4;
		for (int col = 0; col < m_nCols; col++)
		{
			CWnd* pScrollBar = GetDlgItem(AFX_IDW_HSCROLL_FIRST + col);
			ASSERT(pScrollBar != NULL);
			int cx = m_pColInfo[col].nCurSize;
			if (col == 0 && m_nCols < m_nMaxCols)
				x += cxSplitterBox, cx -= cxSplitterBox;
			DeferClientPos(&layout, pScrollBar, x, y, cx, cy, TRUE);
			x += cx + m_cxSplitterGap;
		}
	}

	if (m_bHasVScroll)
	{
		int cySplitterBox = m_cySplitter + bNotWin4;// split box bigger
		int x = rectInside.right + bNotWin4;
		int y = rectClient.top;
		for (int row = 0; row < m_nRows; row++)
		{
			CWnd* pScrollBar = GetDlgItem(AFX_IDW_VSCROLL_FIRST + row);
			ASSERT(pScrollBar != NULL);
			int cy = m_pRowInfo[row].nCurSize;
			if (row == 0 && m_nRows < m_nMaxRows)
				y += cySplitterBox, cy -= cySplitterBox;
			DeferClientPos(&layout, pScrollBar, x, y, cx, cy, TRUE);
			y += cy + m_cySplitterGap;
		}
	}

	//BLOCK: Reposition all the panes
	{
		int x = rectClient.left;
		for (int col = 0; col < m_nCols; col++)
		{
			int cx = m_pColInfo[col].nCurSize;
			int y = rectClient.top;
			for (int row = 0; row < m_nRows; row++)
			{
				int cy = m_pRowInfo[row].nCurSize;
				CWnd* pWnd = GetPane(row, col);
				DeferClientPos(&layout, pWnd, x, y, cx, cy, FALSE);
				y += cy + m_cySplitterGap;
			}
			x += cx + m_cxSplitterGap;
		}
	}

	// move and resize all the windows at once!
	if (layout.hDWP == NULL || !::EndDeferWindowPos(layout.hDWP))
		TRACE0("Warning: DeferWindowPos failed - low system resources.\n");

	// invalidate all the splitter bars (with NULL pDC)
	DrawAllSplitBars(NULL, rectInside.right, rectInside.bottom);
}

void CGfxSplitterWnd::GetInsideRect(CRect& rect) const
{
	CSplitterWnd::GetInsideRect(rect);
	rect.top += m_upBorder;
/*	ASSERT_VALID(this);

	GetClientRect(rect);
	ASSERT(rect.left == 0 && rect.top == 0);

	// subtract space for 3d borders
	rect.InflateRect(-m_cxBorder, -m_cyBorder);
	rect.top += m_upBorder;

	// subtract scrollbar clearance
	if (m_bHasVScroll)
		rect.right -= GetSystemMetrics(SM_CXVSCROLL);
	if (m_bHasHScroll)
		rect.bottom -= GetSystemMetrics(SM_CYHSCROLL);*/
}

BOOL CGfxSplitterWnd::OnEraseBkgnd(CDC* pDC) 
{
//	return CSplitterWnd::OnEraseBkgnd(pDC);

	CRect rectClient;
	GetClientRect(rectClient);
	rectClient.InflateRect(-m_cxBorder, -m_cyBorder);
	rectClient.bottom = rectClient.top + m_upBorder;
	pDC->FillSolidRect(rectClient, GetSysColor(COLOR_3DFACE));
	return true;
}

void CGfxSplitterWnd::OnPaint()
{
	CSplitterWnd::OnPaint();
	if (bWhiteLine)
	{
		CClientDC dc(this);
		CRect rectClient;
		GetClientRect(rectClient);
		CPen pn(PS_SOLID, 1, GetSysColor(COLOR_3DSHADOW));
		CPen * op = dc.SelectObject(&pn);
		dc.MoveTo(rectClient.left, rectClient.top);
		dc.LineTo(rectClient.right, rectClient.top);
		CPen pn1(PS_SOLID, 1, GetSysColor(COLOR_3DHILIGHT));
		dc.SelectObject(&pn1);
		dc.MoveTo(rectClient.left, rectClient.top+1);
		dc.LineTo(rectClient.right, rectClient.top+1);
		dc.SelectObject(op);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产91乱码一区二区三区 | 免费成人在线视频观看| 91小宝寻花一区二区三区| 久久蜜桃av一区二区天堂| 一区二区高清在线| 91福利国产精品| 亚洲一区在线免费观看| 99r国产精品| 亚洲精品国久久99热| 国产成人丝袜美腿| 中日韩av电影| 99在线精品免费| 一区二区三区中文字幕电影| 色呦呦网站一区| 亚洲午夜久久久久久久久电影院| 在线观看91视频| 视频一区在线视频| 精品动漫一区二区三区在线观看| 久久精品国内一区二区三区| 欧美精品在线观看播放| 免费成人av资源网| 久久久不卡网国产精品二区| 狠狠狠色丁香婷婷综合久久五月| 中文字幕欧美三区| 在线亚洲欧美专区二区| 激情深爱一区二区| 亚洲自拍偷拍九九九| 精品久久久久一区| 色偷偷一区二区三区| 国产综合久久久久影院| 亚洲一区二区三区影院| 国产亚洲欧美色| 91精品国产黑色紧身裤美女| eeuss鲁一区二区三区| 蜜臀精品一区二区三区在线观看| 国产精品久久影院| 欧美电影免费观看高清完整版 | 99精品久久只有精品| 麻豆国产欧美日韩综合精品二区 | 亚洲va国产va欧美va观看| 26uuu另类欧美| 欧美日本国产一区| 91在线观看地址| 国产一区在线不卡| 亚洲第一电影网| 中文字幕一区二区三区精华液 | 7777精品伊人久久久大香线蕉超级流畅 | 亚洲已满18点击进入久久| 久久久久久亚洲综合| 777色狠狠一区二区三区| 色哟哟精品一区| 成人理论电影网| 黄一区二区三区| 午夜天堂影视香蕉久久| 中文字幕日韩精品一区| 久久精品欧美日韩| 久久中文字幕电影| 欧美成人精品1314www| 欧美日产在线观看| 精品1区2区3区| 欧美亚洲禁片免费| 欧美三级韩国三级日本三斤| 日本伦理一区二区| 一本大道久久a久久综合婷婷| 成人午夜又粗又硬又大| 国产精品一二二区| 九九热在线视频观看这里只有精品| 视频一区二区中文字幕| 亚洲动漫第一页| 亚洲国产人成综合网站| 亚洲一二三区在线观看| 亚洲一区二区三区自拍| 午夜一区二区三区视频| 丝袜美腿一区二区三区| 天堂久久久久va久久久久| 日韩**一区毛片| 久久99精品国产麻豆婷婷洗澡| 另类调教123区 | 99久久综合色| 91在线国内视频| 91国内精品野花午夜精品| 在线这里只有精品| 欧美日韩中字一区| 欧美一区二区三区喷汁尤物| 精品少妇一区二区三区日产乱码| 日韩三级在线免费观看| 亚洲精品一区二区三区四区高清| 久久先锋影音av鲁色资源网| 久久久久成人黄色影片| 国产精品灌醉下药二区| 一区二区激情小说| 日本伊人午夜精品| 国产一区二区三区不卡在线观看 | 99视频一区二区三区| 欧美在线不卡一区| 91精品视频网| 久久久久国产精品麻豆ai换脸 | 精品国产乱码久久| 国产精品家庭影院| 亚洲高清在线精品| 国产综合久久久久久久久久久久 | 国产麻豆9l精品三级站| 99综合电影在线视频| 在线观看一区不卡| 日韩你懂的电影在线观看| 亚洲国产精品99久久久久久久久| 亚洲码国产岛国毛片在线| 首页综合国产亚洲丝袜| 国产激情精品久久久第一区二区| 色综合天天视频在线观看| 3d动漫精品啪啪1区2区免费| 久久久精品国产免费观看同学| 综合中文字幕亚洲| 秋霞影院一区二区| 不卡视频一二三四| 91麻豆精品国产91久久久资源速度 | 欧美日韩精品电影| 亚洲国产高清在线| 蜜臀久久99精品久久久久久9| 丁香激情综合国产| 欧美一级欧美三级在线观看| 国产精品成人免费精品自在线观看 | 日韩高清不卡一区| 99国产精品久久久久久久久久| 欧美高清激情brazzers| 国产精品午夜在线观看| 美女国产一区二区| 在线观看欧美黄色| 国产精品理伦片| 国产综合久久久久久久久久久久 | 精品国产伦一区二区三区观看体验 | 五月综合激情婷婷六月色窝| 成人精品小蝌蚪| 精品国产髙清在线看国产毛片| 亚洲欧美日韩中文字幕一区二区三区 | 国产日韩在线不卡| 日韩电影在线免费| 在线亚洲精品福利网址导航| 欧美激情一区二区三区蜜桃视频| 奇米影视在线99精品| 91国产视频在线观看| 国产精品污污网站在线观看| 免费看日韩a级影片| 欧美日韩国产中文| 亚洲精品视频在线观看网站| 国产成人av一区二区| 欧美不卡一区二区三区四区| 日韩国产欧美三级| 欧美精品久久久久久久多人混战| 亚洲女同ⅹxx女同tv| 99视频精品在线| 国产精品久久久久四虎| 成人三级伦理片| 国产精品网站一区| 国产成人精品aa毛片| 国产亚洲一区字幕| 国产精品一区二区久久精品爱涩 | 3d成人动漫网站| 亚洲一区二区在线视频| 欧美亚洲日本国产| 亚洲国产乱码最新视频| 欧美另类z0zxhd电影| 午夜日韩在线观看| 欧美一区二区三区视频在线观看| 午夜精品一区二区三区电影天堂 | 在线一区二区三区四区五区| 亚洲精品视频免费看| 91蜜桃传媒精品久久久一区二区| 国产精品美女一区二区三区| 成人一道本在线| 亚洲三级免费电影| 欧洲亚洲国产日韩| 日韩**一区毛片| 久久先锋影音av| 99精品久久只有精品| 亚洲一区在线观看免费观看电影高清| 欧洲一区二区三区免费视频| 婷婷亚洲久悠悠色悠在线播放| 欧美一级淫片007| 国产精品综合一区二区| 亚洲欧洲99久久| 欧美日韩五月天| 美女高潮久久久| 国产精品色一区二区三区| 91免费精品国自产拍在线不卡| 亚洲成人自拍一区| xnxx国产精品| 97成人超碰视| 蜜桃传媒麻豆第一区在线观看| 久久久久久毛片| 色老综合老女人久久久| 日本成人在线不卡视频| 国产亚洲综合性久久久影院| 91麻豆高清视频| 乱一区二区av| 亚洲伦理在线精品| 日韩三级精品电影久久久| 成人自拍视频在线观看| 亚洲成人久久影院| 国产欧美1区2区3区|