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

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

?? menubar.cpp

?? 該文件包含有C8051單片機中實現UART波特率自檢的功能
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
		sizeResult.cy -= rect.Height();
		sizeResult.cx -= rect.Width();
		CSize size = CControlBar::CalcFixedLayout((dwMode & LM_STRETCH), (dwMode & LM_HORZ));
		sizeResult.cx = max(sizeResult.cx, size.cx);
		sizeResult.cy = max(sizeResult.cy, size.cy);
	}
	
	if (dwMode & LM_HORZ)

		sizeResult.cy+=5;
	else
		sizeResult.cx+=3;

	return sizeResult;
}

//******************************************************************
CSize CMenuBar::CalcFixedLayout(BOOL bStretch, BOOL bHorz)
{
	LTRACE(_T("CMenuBar::CalcFixedLayout\n"));
	ASSERT_VALID(this);
	ASSERT(::IsWindow(m_hWnd));

	DWORD dwMode = bStretch ? LM_STRETCH : 0;
	dwMode |= bHorz ? LM_HORZ : 0;

	return CalcLayout(dwMode);
}
//******************************************************************

CSize CMenuBar::CalcDynamicLayout(int nLength, DWORD dwMode)
{
	LTRACE(_T("CMenuBar::CalcDynamicLayout\n"));
	if ((nLength == -1) && !(dwMode & LM_MRUWIDTH) && !(dwMode & LM_COMMIT) &&
		((dwMode & LM_HORZDOCK) || (dwMode & LM_VERTDOCK)))
	{
		LTRACE(_T("    FixedLayout\n"));
		return CalcFixedLayout(dwMode & LM_STRETCH, dwMode & LM_HORZDOCK);
	}
	return CalcLayout(dwMode, nLength);
}

// set m_bWrapped by nWidth
int CMenuBar::WrapMenuBar(int nCount, int nWidth)
{
//	LTRACE(_T("CMenuBar::WrapMenuBar\n"));
	int nResult = 0;
	int x = 0;

	for (int i = 0; i < nCount; ++i) {
		CMenuItem* pItem = m_arrItem[i];
		if (i+1 == nCount)
			return ++nResult;
		
		if (x + pItem->GetHorizontalSize().cx> nWidth) {// itself is over
			if (pItem->GetStyle() & MISTYLE_WRAPPABLE) {
				pItem->ModifyState(0, MISTATE_WRAP);
				++nResult;
				x = 0;
			}
		}
		else if (x + pItem->GetHorizontalSize().cx + 
				 m_arrItem[i+1]->GetHorizontalSize().cx> nWidth) {
			if (pItem->GetStyle() & MISTYLE_WRAPPABLE) {
				pItem->ModifyState(0, MISTATE_WRAP);
				++nResult;
				x = 0;
			}
		}
		else {
			pItem->ModifyState(MISTATE_WRAP, 0);
			x += pItem->GetHorizontalSize().cx;
		}
	}

	return nResult + 1;
}
//******************************************************************
// calc only size, by using m_bWrapped
CSize CMenuBar::CalcSize(int nCount)
{
	ASSERT(nCount > 0);
	CPoint cur(0,0);
	CSize sizeResult(0,0);
	int nWrap = 0;
	for (int i = 0; i < nCount; ++i) {
		CMenuItem* pItem = m_arrItem[i];
		sizeResult.cx = max(cur.x + pItem->GetHorizontalSize().cx, sizeResult.cx);
		sizeResult.cy = max(cur.y + pItem->GetHorizontalSize().cy, sizeResult.cy);

		cur.x += pItem->GetHorizontalSize().cx;
		
		if (pItem->GetState() & MISTATE_WRAP) {
			//LTRACE(_T("    nIndex:%d is wrapped\n"), i);
			cur.x = 0;// reset x pos
			cur.y += pItem->GetHorizontalSize().cy;
			++nWrap;
		}
	}

	return sizeResult;
}
//******************************************************************
void CMenuBar::Layout()
{
	ASSERT(m_bDelayedButtonLayout);

	m_bDelayedButtonLayout = FALSE;

	BOOL bHorz = (m_dwStyle & CBRS_ORIENT_HORZ) != 0;
	if ((m_dwStyle & CBRS_FLOATING) && (m_dwStyle & CBRS_SIZE_DYNAMIC))
		((CMenuBar*)this)->CalcDynamicLayout(0, LM_HORZ | LM_MRUWIDTH | LM_COMMIT);
	else if (bHorz)
		((CMenuBar*)this)->CalcDynamicLayout(0, LM_HORZ | LM_HORZDOCK | LM_COMMIT);
	else
		((CMenuBar*)this)->CalcDynamicLayout(0, LM_VERTDOCK | LM_COMMIT);
}
//******************************************************************
void CMenuBar::SizeMenuBar(int nLength, BOOL bVert)
{
	//LTRACE("CMenuBar::SizeMenuBar\n");
	int nCount = GetItemCount(); ASSERT(nCount > 0);

	if (!bVert) {				// nLength is horizontal length

		if (IsFloating()) {		// half size wrapping

			CSize sizeMax, sizeMin, sizeMid;

			// Wrap MenuBar vertically
			WrapMenuBar(nCount, 0);
			sizeMin = CalcSize(nCount);

			// Wrap MenuBar horizontally
			WrapMenuBar(nCount, 32767);
			sizeMax = CalcSize(nCount);

			// we can never understand this algorithm :), see CToolBar implementation
			while (sizeMin.cx < sizeMax.cx) {
//				LTRACE("looping sizeMin.cx:%d < sizeMax.cx:%d\n", sizeMin.cx, sizeMax.cx);
				sizeMid.cx = (sizeMin.cx + sizeMax.cx) / 2;
				WrapMenuBar(nCount, sizeMid.cx);
				sizeMid = CalcSize(nCount);
				if (sizeMid.cx == sizeMax.cx) {	// if you forget, it loops forever!
					return;
				}
//				LTRACE("    sizeMid : %d %d\n", sizeMid.cx, sizeMid.cy);

				if (nLength >= sizeMax.cx) {
//					LTRACE("    nLength:%d >= sizeMax.cx:%d\n", nLength, sizeMax.cx);
					if (sizeMin == sizeMid) {
						WrapMenuBar(nCount, sizeMax.cx);
//						LTRACE("out SizeMenuBar\n");
						return;
					}
					sizeMin = sizeMid;
				}
				else if (nLength < sizeMax.cx) {
//					LTRACE("    nLength:%d < sizeMax.cx:%d\n", nLength, sizeMax.cx);
					sizeMax = sizeMid;
				}
				else {
//					LTRACE("out SizeMenuBar\n");
					return;
				}
			}
		}
		else {								// each one wrapping
			//LTRACE("    just each one wrapping\n");
			WrapMenuBar(nCount, nLength);
		}
	}
	else {						// nLength is vertical length
		CSize sizeMax, sizeMin, sizeMid;

		// Wrap MenuBar vertically
		WrapMenuBar(nCount, 0);
		sizeMin = CalcSize(nCount);

		// Wrap MenuBar horizontally
		WrapMenuBar(nCount, 32767);
		sizeMax = CalcSize(nCount);

		while (sizeMin.cx < sizeMax.cx) {
			sizeMid.cx = (sizeMin.cx + sizeMax.cx) / 2;
			WrapMenuBar(nCount, sizeMid.cx);
			sizeMid = CalcSize(nCount);
			if (sizeMid.cx == sizeMax.cx) {
				return;
			}
			if (nLength < sizeMid.cy) {
				if (sizeMin == sizeMid) {
					WrapMenuBar(nCount, sizeMax.cx);
					//LTRACE("out SizeMenuBar\n");
					return;
				}
				sizeMin = sizeMid;
			}
			else if (nLength > sizeMid.cy)
				sizeMax = sizeMid;
			else {
				//LTRACE("out SizeMenuBar\n");
				return;
			}
		}
	}

	//LTRACE("out SizeMenuBar\n");
}
//***********************************************************************************
void CMenuBar::DrawCombo()
{
	CRect rect;
	GetClientRect(rect);
	CalcSizeItem();
	CWnd* pFrame = GetTopLevelFrame();
	BOOL bMaximized = FALSE;	
	//la idea es verificar que la ventana es MDI
	if (pFrame->IsKindOf(RUNTIME_CLASS(CMDIFrameWnd)))
	{
		ASSERT_VALID(pFrame);
		CMDIFrameWnd* pMDIFrame = STATIC_DOWNCAST(CMDIFrameWnd, pFrame);
		HWND hWndMDIClient = pMDIFrame->m_hWndMDIClient;
		ASSERT(::IsWindow(hWndMDIClient));
		HWND hWndChild = (HWND)::SendMessage(hWndMDIClient,
			WM_MDIGETACTIVE, 0, (LPARAM)&bMaximized);
	}
	if ((m_dwStyle & CBRS_ORIENT_HORZ) && m_bCombo==TRUE && !(m_dwStyle & CBRS_FLOATING))
	{
		CRect reccombo;
		cmb->GetClientRect (&reccombo);
		if (rect.Width() > m_sizex+(bMaximized?30:0)+reccombo.Width() )
		{
			cmb->ShowWindow(SW_SHOW);				
			CRect rctemp=rect;
			rctemp.top=-1;
			rctemp.bottom-=2;
			int nDif;
			if (!bIsTabbed)
			   nDif=bMaximized?60:0;
			else
			   nDif=0;	
			rctemp.left=rctemp.right-reccombo.Width()-  nDif;
			rctemp.right=rctemp.left+reccombo.Width();
			cmb->MoveWindow(rctemp);	
		}
		else
		{
			cmb->ShowWindow(SW_HIDE);
		}
	}	

}

//******************************************************************
void CMenuBar::CalcSizeItem()
{
	m_sizex=0;
	for(int i = 0; i < m_arrItem.GetSize(); ++i) {
		CMenuItem* pItem = m_arrItem[i];
		m_sizex+=pItem->GetRect().Width();
	}

}

//******************************************************************
CSize CMenuBar::CalcVertDockSize(int nCount)
{
	ASSERT(nCount > 0);
	CSize sizeResult(0, 0);
	
	for (int i = 0; i < nCount; ++i) {
		CMenuItem* pItem = m_arrItem[i];
		sizeResult.cy += pItem->GetRect().Height();
	}

	sizeResult.cx = _cyMenuOnBar;
	return sizeResult;
}

//******************************************************************
void CMenuBar::CalcItemLayout(int nCount, BOOL bVert)
{
	ASSERT(nCount > 0);
	int x = 0; int y = 0;

	if (!bVert) {
		for (int i = 0; i < nCount; ++i) {
			CMenuItem* pItem = m_arrItem[i];
			CPoint ptItem(x, y);
			pItem->Layout(ptItem, TRUE);// layout by itself!
			if (pItem->GetState() & MISTATE_WRAP) {
				x = 0;// reset x to 0
				y += pItem->GetRect().Height();
			}
			else
				x += pItem->GetRect().Width();
		}		
	}
	else {
		for (int i = 0; i < nCount; ++i) {
			CMenuItem* pItem = m_arrItem[i];
			CPoint	ptItem(0, y);
			pItem->Layout(ptItem, FALSE);	// layout by itself
			y += pItem->GetRect().Height();
		}
	}
}
//******************************************************************
//////////////////////////////////////////////////////////////////////
// Added by Koay Kah Hoe. Thanx!
void CMenuBar::OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler)
{
	if (m_bMDIApp)
		CheckActiveChildWndMaximized();
}
//******************************************************************
//////////////////////////////////////////////////////////////////////
// CMenuBar decoration

void CMenuBar::_DrawGripper(CWindowDC* dc,CRect* rcWin)
{


	if (m_dwStyle & CBRS_FLOATING) return ;
	if (m_dwStyle & CBRS_ORIENT_HORZ)
		{
			
			rcWin->top+=9;
			rcWin->left+=7;
			rcWin->right=rcWin->left+3;
			rcWin->bottom-=3;

			for (int i=0; i < rcWin->Height(); i+=2)
			{
				CRect rcWindow;
				CBrush cb;
				cb.CreateSolidBrush(::GetSysColor(COLOR_BTNSHADOW));
				rcWindow=rcWin;
				rcWindow.top=rcWin->top+i;
				rcWindow.bottom=rcWindow.top+1;
				dc->FillRect(rcWindow,&cb);
		
			}
			
		}
		else
		{
			rcWin->top+=2;
			rcWin->left+=2;
			rcWin->right-=2;
			rcWin->bottom=rcWin->top+3;
			for (int i=0; i < rcWin->Width(); i+=2)
			{
				CRect rcWindow;
				CBrush cb;
				cb.CreateSolidBrush(::GetSysColor(COLOR_BTNSHADOW));
				rcWindow=rcWin;
				rcWindow.left=rcWindow.left+i;
				rcWindow.right=rcWindow.left+1;
				dc->FillRect(rcWindow,&cb);
		
			}

		}


}

//******************************************************************
void CMenuBar::EraseNonClientEx()
{
	// get window DC that is clipped to the non-client area
	CWindowDC dc(this);
	CRect rectClient;
	GetClientRect(rectClient);
	CRect rectWindow;

	GetWindowRect(rectWindow);
	ScreenToClient(rectWindow);
	rectClient.OffsetRect(-rectWindow.left, -rectWindow.top);
	dc.ExcludeClipRect(rectClient);
	
	// draw borders in non-client area
	rectWindow.OffsetRect(-rectWindow.left, -rectWindow.top);

	dc.IntersectClipRect(rectWindow);
	SendMessage(WM_ERASEBKGND, (WPARAM)dc.m_hDC);
	
	// draw gripper in non-client area
	_DrawGripper(&dc, &rectWindow);
}

#define CX_BORDER   1
#define CY_BORDER   1
//******************************************************************
void CMenuBar::DrawRaisedBorders(CDC* pDC, CRect& rect)
{
	ASSERT_VALID(this);
	ASSERT_VALID(pDC);

	DWORD dwStyle = m_dwStyle;
	if (!(dwStyle & CBRS_BORDER_ANY))
		return;

	// prepare for dark lines
	ASSERT(rect.top == 0 && rect.left == 0);
	CRect rect1, rect2;
	rect1 = rect;
	rect2 = rect;
	COLORREF clrBtnShadow = ::GetSysColor(COLOR_BTNSHADOW);//afxData.bWin4 ? afxData.clrBtnShadow : afxData.clrWindowFrame;
	COLORREF clrBtnFace = ::GetSysColor(COLOR_BTNFACE);
	COLORREF clrBtnHilight = ::GetSysColor(COLOR_BTNHILIGHT);

	// draw dark line one pixel back/up
	if (dwStyle & CBRS_BORDER_3D)
	{
		rect1.right -= CX_BORDER;
		rect1.bottom -= CY_BORDER;
	}
	if (dwStyle & CBRS_BORDER_TOP)
		rect2.top += cyBorder2;
	if (dwStyle & CBRS_BORDER_BOTTOM)
		rect2.bottom -= cyBorder2;

	// draw left and top
	if (dwStyle & CBRS_BORDER_LEFT)
		pDC->FillSolidRect(0, rect2.top, CX_BORDER, rect2.Height(), clrBtnFace);
	if (dwStyle & CBRS_BORDER_TOP)
		pDC->FillSolidRect(0, 0, rect.right, CY_BORDER, clrBtnFace);

	// draw right and bottom
	if (dwStyle & CBRS_BORDER_RIGHT)
		pDC->FillSolidRect(rect1.right, rect2.top, -CX_BORDER, rect2.Height(), clrBtnShadow);
	if (dwStyle & CBRS_BORDER_BOTTOM)
		pDC->FillSolidRect(0, rect1.bottom, rect.right, -CY_BORDER, clrBtnShadow);

	if (dwStyle & CBRS_BORDER_3D)
	{
		// draw left and top
		if (dwStyle & CBRS_BORDER_LEFT)
			pDC->FillSolidRect(1, rect2.top, CX_BORDER, rect2.Height(), clrBtnHilight);
		if (dwStyle & CBRS_BORDER_TOP)
			pDC->FillSolidRect(0, 1, rect.right, CY_BORDER, clrBtnHilight);

		// draw right and bottom
		if (dwStyle & CBRS_BORDER_RIGHT)
			pDC->FillSolidRect(rect.right, rect2.top, -CX_BORDER, rect2.Height(), clrBtnFace);
		if (dwStyle & CBRS_BORDER_BOTTOM)
			pDC->FillSolidRect(0, rect.bottom, rect.right, -CY_BORDER, clrBtnFace);
	}

	if (dwStyle & CBRS_BORDER_LEFT)
		rect.left += cxBorder2;
	if (dwStyle & CBRS_BORDER_TOP)
		rect.top += cyBorder2;
	if (dwStyle & CBRS_BORDER_RIGHT)
		rect.right -= cxBorder2;
	if (dwStyle & CBRS_BORDER_BOTTOM)
		rect.bottom -= cyBorder2;		
}

//******************************************************************
int CMenuBar::GetNextOrPrevButton(int nIndex, BOOL bPrev)
{
	int nCount = GetItemCount();
	if (bPrev) {				// <-
		--nIndex;
		if (nIndex < 0)
			nIndex = nCount - 1;
	}
	else {						// ->
		++nIndex;
		if (nIndex >= nCount)
			nIndex = 0;
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产99久久久国产精品潘金网站| 亚洲欧洲日韩综合一区二区| 有坂深雪av一区二区精品| 国产精品一二三| 久久精品一区二区| 国产一区二区三区在线观看精品| av在线不卡电影| 精品久久久三级丝袜| 裸体一区二区三区| 日韩一区二区三区免费观看| 日欧美一区二区| 欧美精品一二三四| 麻豆国产精品视频| 久久蜜桃av一区二区天堂 | 国产在线精品一区二区三区不卡| 欧美日韩亚洲综合一区二区三区| 亚洲成人午夜影院| 91精品国产色综合久久久蜜香臀| 亚洲成a人片在线观看中文| 精品视频在线免费观看| 亚洲成人免费av| 欧美tickling挠脚心丨vk| 加勒比av一区二区| 国产精品婷婷午夜在线观看| 狠狠色丁香久久婷婷综| 欧美在线观看视频一区二区三区| 亚洲一区国产视频| 欧美一级夜夜爽| 国产黄色精品视频| 亚洲精品视频免费观看| 欧美男女性生活在线直播观看| 日韩中文字幕区一区有砖一区 | 国产日韩v精品一区二区| 国产高清精品在线| 亚洲老司机在线| a级精品国产片在线观看| 亚洲国产精品一区二区www在线| 制服.丝袜.亚洲.中文.综合| 精品一区二区三区免费视频| 中文字幕第一区二区| 91国产免费观看| 激情文学综合插| 亚洲色欲色欲www| 日韩精品中文字幕在线不卡尤物| 国产成人午夜99999| 亚洲福利电影网| 国产日韩精品久久久| 欧美精品精品一区| 成人在线综合网| 亚洲香肠在线观看| 国产亚洲一二三区| 成人美女在线视频| 日本在线播放一区二区三区| 国产精品每日更新| 欧美日韩国产美女| 成人综合婷婷国产精品久久 | 日本一区二区电影| 91精品国产色综合久久| a4yy欧美一区二区三区| 老司机精品视频线观看86| 亚洲美女视频在线观看| 久久亚洲精华国产精华液| 欧美浪妇xxxx高跟鞋交| 成人av电影在线| 国产在线国偷精品免费看| 尤物av一区二区| 国产精品嫩草久久久久| 欧美精选在线播放| 91国产丝袜在线播放| 久久99九九99精品| 中文字幕在线视频一区| 26uuu色噜噜精品一区| 欧美乱妇一区二区三区不卡视频| heyzo一本久久综合| 国产乱码字幕精品高清av| 免费人成黄页网站在线一区二区| 亚洲男人的天堂在线观看| 欧美一区在线视频| 欧美日韩在线直播| 91麻豆精品一区二区三区| 北条麻妃一区二区三区| 轻轻草成人在线| 日韩成人午夜精品| 亚洲成av人片| 亚洲bt欧美bt精品| 亚洲综合区在线| 亚洲国产精品成人综合色在线婷婷 | 欧美日韩国产美| 欧美色视频一区| 欧美日韩一级二级| 欧美日韩一区二区在线观看视频| 91久久精品网| 在线观看网站黄不卡| 日本韩国一区二区三区| 国产剧情一区在线| 国产制服丝袜一区| 美女脱光内衣内裤视频久久影院| 亚洲午夜三级在线| 国产精品主播直播| 久久精品国产亚洲a| 精品亚洲国产成人av制服丝袜| 日本视频中文字幕一区二区三区| 粉嫩在线一区二区三区视频| 亚洲成人动漫av| 亚洲国产精品人人做人人爽| 亚洲免费观看高清| 视频一区国产视频| 日本欧美久久久久免费播放网| 欧美色电影在线| 老司机午夜精品| 天天综合日日夜夜精品| 最新中文字幕一区二区三区| 久久精品一区二区| 日韩免费观看2025年上映的电影| 一本色道久久综合亚洲精品按摩| 国产成人一区在线| 久久成人18免费观看| 日韩av二区在线播放| 一区二区三区精密机械公司| 欧美激情一区二区三区全黄 | 天堂在线亚洲视频| 制服丝袜成人动漫| eeuss鲁片一区二区三区| 国产精品影视网| 国产主播一区二区三区| 久久成人免费网站| 精品午夜久久福利影院 | 精一区二区三区| 美女精品自拍一二三四| 日韩国产在线观看| 亚洲韩国精品一区| 亚洲午夜影视影院在线观看| 亚洲日韩欧美一区二区在线| 国产人伦精品一区二区| 欧美激情中文字幕| 国产欧美精品一区二区色综合| 精品少妇一区二区三区| 精品国产乱码久久久久久图片| 欧美一区二区三区电影| 欧美日韩和欧美的一区二区| 欧美午夜一区二区| 欧美福利视频一区| 日韩一区二区三区四区五区六区| 91精品国产入口| 久久中文娱乐网| 国产欧美日韩激情| 亚洲人妖av一区二区| 亚洲乱码国产乱码精品精小说| 18欧美亚洲精品| 一区二区三区四区不卡在线| 亚洲综合激情网| 夜夜嗨av一区二区三区网页| 亚洲欧美日韩中文播放| 国产精品色在线观看| 亚洲女女做受ⅹxx高潮| 午夜精品久久久久久久久久久 | 老司机午夜精品99久久| 国产精品一级在线| 色综合色综合色综合| 欧美精品 日韩| 国产欧美一区二区精品性色| 亚洲国产精品久久一线不卡| 国产91精品久久久久久久网曝门| 在线视频国产一区| 国产亚洲精品免费| 麻豆免费精品视频| 色天天综合久久久久综合片| 2021中文字幕一区亚洲| 亚洲18色成人| 99久久久国产精品免费蜜臀| 久久网这里都是精品| 天堂成人国产精品一区| 色88888久久久久久影院野外| 久久精品一区二区三区不卡牛牛 | 一区二区三区四区视频精品免费 | 国产精品午夜在线| 久草热8精品视频在线观看| 欧美写真视频网站| 亚洲日本va午夜在线影院| 成人午夜在线播放| www国产亚洲精品久久麻豆| 午夜日韩在线电影| 欧美视频一区二区| 亚洲人成在线播放网站岛国| yourporn久久国产精品| 国产精品视频一二| 丁香婷婷综合五月| 国产亚洲人成网站| 国产一区二区剧情av在线| 日韩欧美高清一区| 久久成人免费日本黄色| 欧美一二三区在线| 蜜桃视频免费观看一区| 日韩一级在线观看| 奇米精品一区二区三区四区 | 色综合久久久久综合体桃花网| 亚洲国产高清aⅴ视频| www.在线欧美| 怡红院av一区二区三区| 在线欧美小视频|