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

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

?? menubar.cpp

?? 該文件包含有C8051單片機中實現UART波特率自檢的功能
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
/****************************************************************************
 *																			*		 
 *								GuiToolKit  								*	
 *							 (MFC extension)								*			 
 * Created by Francisco Campos G. www.beyondata.com fcampos@beyondata.com	*
 *--------------------------------------------------------------------------*		   
 *																			*
 * This program is free software;so you are free to use it any of your		*
 * applications (Freeware, Shareware, Commercial),but leave this header		*
 * intact.																	*
 *																			*
 * These files are provided "as is" without warranty of any kind.			*
 *																			*
 *			       GuiToolKit is forever FREE CODE !!!!!					*
 *																			*
 *--------------------------------------------------------------------------*
 *																			*
 * Bug Fixes and improvements : (Add your name)								*
 * -Francisco Campos														*				
 * -igor1960																*	
 ****************************************************************************/


//
// Class	:  CMenuBar
// 
// Version	: 1.0
// 
// Created	: Jan 14, 2001        
//
// Last Modified: Francisco Campos. 
//
// CMenuBar class version 2.12
//		simulates a Dev Studio style dockable menu bar.
//		based on PixieLib written by Paul DiLascia<www.dilascia.com>
//
// version history
//		2.12 : support OLE menu carelessly.
//		2.11 : WindowMenu fixed by VORGA.
//		2.10 : CMenuDockBar's problem fixed again and again.
//		2.08 : give up precise ComputeMenuTrackPoint
//		2.07 : Sychronizing with frame activation problem fixed
//		2.06 : CMenuItem::ComputeMenuTrackPoint fixed a little
//		2.05 : CMenuDockBar fixed
//			 : Inactive state problem fixed
//		2.04 : bug with ::TrackPopupEx carelessly fixed 
//           : synchronizing TrackPopup animation with win98 effect
//
//						written by MB <mb2@geocities.co.jp> 1999.11.27
//
//
//
// CMenuBar version 2.13

#include "stdafx.h"
#include "..\header\MenuBar.h"
#include "..\header\GuiDockContext.h"
#include <afxole.h>
#include "..\header\menubar.h"

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

#ifdef _DEBUG
	const BOOL bTraceOn = FALSE;
	#define LTRACE if (bTraceOn) TRACE
	const BOOL bTraceOn2 = TRUE;
	#define LTRACE2 if (bTraceOn2) TRACE
#else
	#define LTRACE
	#define LTRACE2
#endif

BOOL bActivSystemMenu;
//////////////////////////////////////////////////////////////////////
// I've found string resource of "More windows" in "user.exe".
// But I can't load it, so please replace a following with your language.
static const TCHAR _szMoreWindows[] = _T("&More windows...");

//////////////////////////////////////////////////////////////////////
// used for OLE menu (easy fix)
static BOOL _bWindowMenuSendCmd = FALSE;
static int _nPrevIndexForCmd = -1;

//////////////////////////////////////////////////////////////////////
// hook
static CMenuBar* g_pMenuBar = NULL;
static HHOOK	 g_hMsgHook = NULL;

// message
const UINT CMenuBar::WM_GETMENU = ::RegisterWindowMessage(_T("CMenuBar::WM_GETMENU"));
const UINT MB_SET_MENU_NULL = ::RegisterWindowMessage(_T("CMenuBar::MB_SET_MENU_NULL"));

const int cxBorder2 = ::GetSystemMetrics(SM_CXBORDER)*2;
const int cyBorder2 = ::GetSystemMetrics(SM_CYBORDER)*2;

// common resources
static CFont _fontHorzMenu, _fontVertMenu;
static int _cyHorzFont, _cyMenuOnBar, _cyTextMargin;
const int CXTEXTMARGIN = 5;

DWORD dSt;
COLORREF   m_clrFace;

int		gbintHorz;			//Horz=0, Vert=1
CRect	rcMenu;					//CRect of button
static BOOL _InitCommonResources(BOOL bForce = FALSE)
{
	if (bForce == FALSE && _fontHorzMenu.m_hObject != NULL)
		return TRUE;// no need to reinitialize

	// clean up
	_fontHorzMenu.DeleteObject();
	_fontVertMenu.DeleteObject();

	// create fonts
	NONCLIENTMETRICS info; info.cbSize = sizeof(info);
	::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(info), &info, 0);
	if (!_fontHorzMenu.CreateFontIndirect(&info.lfMenuFont))
		return FALSE;

	// create vertical font
	info.lfMenuFont.lfEscapement = -900;
	info.lfMenuFont.lfOrientation = -900;
	strcpy(info.lfMenuFont.lfFaceName,"verdana");
	if (!_fontVertMenu.CreateFontIndirect(&info.lfMenuFont))
		return FALSE;

	// get font height
	_cyHorzFont = abs(info.lfMenuFont.lfHeight);

	// calc Y text margin
	_cyMenuOnBar = info.iMenuHeight;
	_cyMenuOnBar = max(_cyMenuOnBar, ::GetSystemMetrics(SM_CYSMICON));
	_cyTextMargin = (_cyMenuOnBar - _cyHorzFont) / 2;

	return TRUE;
}

// I wanted to control popup point, but I've fount we can never get popupmenu rect before popup.
// even if not owner draw menu...




static CPoint _ComputeMenuTrackPoint(const CRect& rcItem, DWORD dwStyle, UINT& fuFlags, TPMPARAMS& tpm)
{
	fuFlags = TPM_LEFTBUTTON | TPM_LEFTALIGN | TPM_HORIZONTAL;
	tpm.cbSize = sizeof(tpm);
	CPoint pt;
	CRect& rcExclude = (CRect&)tpm.rcExclude;
	CWnd::GetDesktopWindow()->GetWindowRect(&rcExclude);

	CRect rcFrame;
	AfxGetMainWnd()->GetWindowRect(&rcFrame);

	switch (dwStyle & CBRS_ALIGN_ANY) {
	case CBRS_ALIGN_RIGHT:
	case CBRS_ALIGN_LEFT:
		pt = CPoint(rcItem.right+1, rcItem.top-1);
		// to avoid strange menu flip, won't do : [rcExclude.right = rcItem.right+1;]
		// I want to use : fuFlags |= TPM_HORNEGANIMATION;
		break;

	default: //	case CBRS_ALIGN_TOP:
		// changed by Manfred Drasch - start
		CRect rcTmpItem;
		rcTmpItem = rcItem;
		if(rcTmpItem.left < 0)
		{
			rcTmpItem.right = rcTmpItem.Width();
			rcTmpItem.left = 0;
		}
		
		if(rcTmpItem.left > rcExclude.right)
		{
			rcTmpItem.right = rcExclude.right; 
			rcTmpItem.left = rcTmpItem.right-rcTmpItem.Width();
		}
		pt = CPoint(rcTmpItem.left-1, rcTmpItem.bottom);
		rcExclude.bottom = rcTmpItem.bottom+1;// <- insead of [fuFlags |= TPM_VERPOSANIMATION;]
		// changed by Manfred Drasch - end
		break;
	}
	return pt;
}


//******************************************************************
static int _CalcTextWidth(const CString& strText)
{
	CWindowDC dc(NULL);
	CRect rcText(0, 0, 0, 0);
	CFont* pOldFont = dc.SelectObject(&_fontHorzMenu);
	dc.DrawText(strText, &rcText, DT_SINGLELINE | DT_CALCRECT);
	dc.SelectObject(pOldFont);

	return rcText.Width();
}

//******************************************************************
// grippers pasted from MFC6
#define CX_GRIPPER  3
#define CY_GRIPPER  3
#define CX_BORDER_GRIPPER 2
#define CY_BORDER_GRIPPER 2
#define CX_GRIPPER_ALL CX_GRIPPER + CX_BORDER_GRIPPER*2
#define CY_GRIPPER_ALL CY_GRIPPER + CY_BORDER_GRIPPER*2

/////////////////////////////////////////////////////////////////////////////
// CMenuBar
BEGIN_MESSAGE_MAP(CMenuBar, CControlBar)
	//{{AFX_MSG_MAP(CMenuBar)
	ON_WM_LBUTTONDOWN()
	ON_WM_RBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_WM_CREATE()
	ON_WM_LBUTTONUP()
	ON_WM_TIMER()
	ON_WM_DESTROY()
	ON_WM_NCCALCSIZE()
	ON_WM_NCPAINT()
	ON_WM_NCHITTEST()
	ON_WM_SIZE()
	ON_WM_SETCURSOR()
	ON_WM_SYSCOLORCHANGE()
	//}}AFX_MSG_MAP
	ON_REGISTERED_MESSAGE(MB_SET_MENU_NULL, OnSetMenuNull)
	ON_WM_PAINT()
END_MESSAGE_MAP()

IMPLEMENT_DYNAMIC(CMenuBar, CControlBar)

/////////////////////////////////////////////////////////////////////////////
// CMenuBar Construction
CMenuBar::CMenuBar()
{
	m_nCurIndex  = -1;
	m_nTrackingState = none;
	m_bProcessRightArrow = m_bProcessLeftArrow = TRUE;
	m_bIgnoreAlt = FALSE;
	m_hMenu = NULL;
	m_nIDEvent = NULL;
	szNameHistory.Empty();
	bSaveHistory=FALSE;
	m_bChangeState=FALSE;
	m_bMDIMaximized = FALSE;
	m_hWndMDIClient = NULL;
	m_hWndActiveChild = NULL;

	m_pMenuIcon = NULL;
	m_pMenuControl = NULL;

	m_bDelayedButtonLayout = TRUE;
	m_dwExStyle = 0;

	m_bFrameActive = FALSE;
	m_bMDIApp = FALSE;
	m_style = Office97;  //by default
	m_bXP=FALSE;
	cmb=NULL;
	m_bCombo=FALSE;//combobox by default
	bIsTabbed=FALSE;
	m_MenuContext=NULL;
}

//******************************************************************
BOOL CMenuBar::Create(CWnd* pParentWnd, DWORD dwStyle, UINT nID)
{
	return CreateEx(pParentWnd, dwStyle,
		CRect(m_cxLeftBorder, m_cyTopBorder, m_cxRightBorder, m_cyBottomBorder), nID);
	
}

//******************************************************************
BOOL CMenuBar::CreateEx(CWnd* pParentWnd, DWORD dwStyle, CRect rcBorders, UINT nID)
{
	ASSERT_VALID(pParentWnd);// must have a parent
	ASSERT (!((dwStyle & CBRS_SIZE_FIXED) && (dwStyle & CBRS_SIZE_DYNAMIC)));

	SetBorders(rcBorders);

	// save the original style
	m_dwExStyle = dwStyle;

	// save the style
	m_dwStyle = (dwStyle & CBRS_ALL);// ******fixed by Mark Gentry, thanx!******
	
	dwStyle &= ~CBRS_ALL;
	dwStyle|=WS_CLIPCHILDREN | CCS_NOPARENTALIGN | CCS_NOMOVEY | CCS_NORESIZE;
	CString strClass = AfxRegisterWndClass(
		CS_HREDRAW | CS_VREDRAW |
		CS_DBLCLKS,// don't forget!
		AfxGetApp()->LoadStandardCursor(IDC_ARROW),
		(HBRUSH)(COLOR_BTNFACE+1));

	m_clrFace=GuiDrawLayer::GetRGBColorFace();
	return CWnd::Create(strClass, _T("MenuBar"), dwStyle, CRect(), pParentWnd, nID);
}
void CMenuBar::SetSaveHistory(CString sNameHistory,BOOL bsaveHistory)
{
	szNameHistory=sNameHistory;
	bSaveHistory=bsaveHistory;
}
//******************************************************************
int CMenuBar::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CControlBar::OnCreate(lpCreateStruct) == -1)
		return -1;

	CWnd* pFrame = GetOwner();
	ASSERT_VALID(pFrame);

	// hook frame window to trap WM_MENUSELECT
	//m_hookFrame.Install(this, pFrame->GetSafeHwnd());

	// If this is an MDI app, hook client window to trap WM_MDISETMENU
	if (pFrame->IsKindOf(RUNTIME_CLASS(CMDIFrameWnd))) {
		m_bMDIApp = TRUE;
		m_hWndMDIClient = ((CMDIFrameWnd*)pFrame)->m_hWndMDIClient;
		ASSERT(::IsWindow(m_hWndMDIClient));
		m_hookMDIClient.Install(this, m_hWndMDIClient);
	}

	if (m_pDockContext==NULL)
		m_pDockContext=new CGuiDockContext(this);
	ASSERT(m_pDockContext);

	if (!_InitCommonResources()) {
		TRACE(_T("Failed to create menubar resource\n"));
		return FALSE;
	}	

	return 0;
}


void CMenuBar::OnSysColorChange( )
{
	CWnd::OnSysColorChange( );
	CClientDC dc(this);
	m_clrFace=GuiDrawLayer::GetRGBColorFace();
	for (int i = 0; i < m_arrItem.GetSize(); ++i)
		m_arrItem[i]->UpdateClr();
	
	/*if(m_pMenuControl != NULL) 
		m_pMenuControl->SetColorButton(GuiDrawLayer::GetRGBColorFace());
	if(m_pMenuIcon != NULL) 
	{
		m_pMenuIcon->OnActivateChildWnd();
		m_pMenuIcon->Update(&dc);	
	}*/
	
}
//******************************************************************

BOOL CMenuBar::CreateCombo(CComboBox* pControl,UINT nID,int iSize,DWORD dwStyle)
{
	CFont m_Font;
	m_Font.CreateStockObject (DEFAULT_GUI_FONT);
	if(!pControl->Create(dwStyle, CRect(1,1,iSize,100), this, nID))
	{
		TRACE(_T("Failed to create combo-box\n"));
		m_bCombo=FALSE;
		return FALSE;
	}
	m_bCombo=TRUE;
	cmb=(CGuiComboBoxExt*)pControl;
	cmb->ActiveHistory(TRUE);
	cmb->LoadHistory(szNameHistory,bSaveHistory);	
	return TRUE;
}

//******************************************************************
void CMenuBar::OnSize(UINT nType, int cx, int cy) 
{
	RefreshBar();
	if (m_bCombo==TRUE)
		DrawCombo();
}


void CMenuBar::SetTabbed(BOOL bIstabed)
{
	bIsTabbed=bIstabed;
}

//******************************************************************
BOOL CMenuBar::InitItems()
{
	ASSERT(m_hMenu);

	// clean up all items
	DeleteItems();

	// buttons
	for (int i = 0; i < ::GetMenuItemCount(m_hMenu); ++i) {
		m_arrItem.Add(new CMenuButton(m_hMenu, i,this));
	}

	if (m_bMDIApp) {
		// icon
		if (!bIsTabbed)
		{

			m_pMenuIcon = new CMenuIcon(this);
			m_arrItem.InsertAt(0, m_pMenuIcon);
			// frame control
			m_pMenuControl = new CMenuControl(this);
			m_arrItem.Add(m_pMenuControl);

			// reinitializing
			m_pMenuIcon->OnActivateChildWnd();
			m_pMenuControl->OnActivateChildWnd();
		}
	}
	
	return TRUE;
}

//******************************************************************
BOOL CMenuBar::LoadMenuBar(UINT nIDResource)
{
	ASSERT(m_hMenu == NULL);

	ASSERT_VALID(m_pDockSite);
	if (m_pDockSite->GetMenu()) {
		PostMessage(MB_SET_MENU_NULL, (WPARAM)m_pDockSite->GetSafeHwnd());
	}
	
	m_hMenu = ::LoadMenu(AfxGetInstanceHandle(), MAKEINTRESOURCE(nIDResource));
	if (m_hMenu == NULL) {
		TRACE(_T("Failed to load menu\n"));
		return FALSE;
	}

	return InitItems();
}

//******************************************************************

HMENU CMenuBar::LoadMenu(HMENU hMenu, HMENU hWindowMenu)
{
	ASSERT(::IsMenu(hMenu));
	ASSERT_VALID(this);
	
	CFrameWnd* pFrame = GetParentFrame();
	if (::GetMenu(pFrame->GetSafeHwnd()) != NULL) {
		// not to make MFC ignore SetMenu(NULL), post it.
		PostMessage(MB_SET_MENU_NULL, (WPARAM)pFrame->GetSafeHwnd());
	}

	HMENU hOldMenu = m_hMenu;
	m_hMenu = hMenu;// menu is shared with MFC

	// initialize Items 
	VERIFY(InitItems());

	if (hMenu) {
		m_hWindowMenu = hWindowMenu;
		RefreshBar();// and menubar itself
	}

	return hOldMenu;
}

//******************************************************************

void CMenuBar::RefreshBar()
{
	InvalidateRect(NULL);

#if _MFC_VER >= 0x600

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆成人在线观看| 日韩欧美中文字幕制服| 成人福利视频在线看| 久久精品亚洲乱码伦伦中文| 国产精品久久久久久久久久久免费看 | 日韩免费视频一区二区| 欧美天堂一区二区三区| 欧美另类变人与禽xxxxx| 久久精品一区四区| 亚洲精品午夜久久久| 偷拍与自拍一区| 国产99久久久国产精品潘金网站| 在线亚洲欧美专区二区| 日韩精品一区二区三区四区视频| 一区二区三区不卡在线观看 | 国产91丝袜在线观看| 国产精品久久久久久久久果冻传媒 | 精品对白一区国产伦| 国产精品自拍三区| 自拍偷拍国产精品| 欧美精品乱码久久久久久按摩| 久久99这里只有精品| 国产精品第一页第二页第三页| 欧美专区在线观看一区| 麻豆成人综合网| 1000精品久久久久久久久| 欧美区在线观看| 成人h版在线观看| 日韩成人精品在线观看| 国产嫩草影院久久久久| 欧美在线一区二区三区| 国产麻豆精品视频| 亚洲图片欧美一区| 久久久精品免费免费| 欧美精品在线视频| 蜜臀av性久久久久蜜臀aⅴ| 国产欧美一区在线| 人妖欧美一区二区| 麻豆成人av在线| 欧美一区二区网站| 天堂资源在线中文精品| 国产精品成人一区二区三区夜夜夜| 欧美在线视频你懂得| 色老汉av一区二区三区| 欧美一区二区女人| 欧美激情综合五月色丁香小说| 日韩一级免费观看| 日韩女优av电影在线观看| 在线播放欧美女士性生活| 宅男噜噜噜66一区二区66| 国产福利一区在线| 亚洲狠狠爱一区二区三区| 欧美日韩dvd在线观看| 99在线精品观看| 亚洲品质自拍视频网站| 91精品国产高清一区二区三区蜜臀| 国产91在线观看丝袜| 亚洲妇女屁股眼交7| 久久精品在线免费观看| 99久久精品国产毛片| 精品亚洲欧美一区| 中文字幕一区在线| 亚洲国产精品成人久久综合一区| 日韩欧美一级二级| 91精品国产综合久久福利| 色婷婷久久久久swag精品 | 欧美高清一级片在线观看| 欧美一区二区黄| 欧美一区三区四区| 56国语精品自产拍在线观看| 国产一区美女在线| 精品在线免费观看| 洋洋av久久久久久久一区| 美腿丝袜亚洲色图| 国产亚洲欧美一级| 51午夜精品国产| 精品一区二区三区香蕉蜜桃| 久久久久99精品国产片| 99国产精品久久久久久久久久| 久久丁香综合五月国产三级网站| 亚洲一区二区三区在线| 一级精品视频在线观看宜春院| 国产日韩影视精品| 中文字幕不卡在线播放| 免费在线观看一区| 亚洲成av人片在线观看| 99re在线精品| 在线免费观看视频一区| 日本二三区不卡| 色噜噜狠狠成人网p站| 91女神在线视频| 成人免费av在线| av电影一区二区| 欧美影片第一页| 在线播放日韩导航| 日韩欧美在线影院| 欧美精品一区二区三| 国产视频911| 亚洲欧洲日本在线| 亚洲成人av一区二区| 日本亚洲天堂网| 国产自产高清不卡| 91日韩在线专区| 337p亚洲精品色噜噜| 精品国产第一区二区三区观看体验| 精品久久人人做人人爰| 国产精品久久国产精麻豆99网站| 国产精品乱码人人做人人爱| 亚洲精品免费看| 国内精品免费在线观看| 风流少妇一区二区| 欧美亚洲综合一区| 欧美国产综合色视频| 亚洲自拍偷拍图区| 国产电影一区二区三区| 在线精品视频免费观看| 日韩一级片在线播放| 亚洲人成网站精品片在线观看 | 91精品国产福利在线观看| 久久久蜜桃精品| 午夜精品福利久久久| 91蜜桃在线免费视频| 在线不卡免费欧美| 国产精品超碰97尤物18| 美女www一区二区| 欧美另类一区二区三区| 日韩美女视频一区| av毛片久久久久**hd| 久久综合国产精品| 日韩国产精品久久| 欧美少妇xxx| 日韩精品每日更新| 欧美日韩中文一区| 亚洲高清在线精品| 欧美系列亚洲系列| 亚洲自拍都市欧美小说| 国产成人免费在线观看不卡| 久久久精品人体av艺术| 国模冰冰炮一区二区| 精品成人a区在线观看| 国内国产精品久久| 久久久综合精品| 99免费精品视频| 中文字幕制服丝袜成人av| 国产一区二区三区综合| 国产欧美日韩另类一区| 国产精品一区二区三区99| 欧美变态口味重另类| 国产最新精品免费| 亚洲视频在线观看一区| 色94色欧美sute亚洲线路一ni| 亚洲一卡二卡三卡四卡五卡| 欧美一区在线视频| 成人久久18免费网站麻豆| 亚洲天堂免费在线观看视频| 91精品中文字幕一区二区三区| 日韩成人av影视| 亚洲色图欧美偷拍| 欧美一区二区三区的| 国产91综合网| 日本欧美一区二区三区乱码 | 中文无字幕一区二区三区| www.视频一区| 国产一区二区三区香蕉 | 国内精品久久久久影院一蜜桃| 国产精品高潮呻吟久久| 欧美日韩精品一区二区天天拍小说 | 欧美一区二区视频在线观看2022| 成人不卡免费av| 日韩精品福利网| 亚洲图片有声小说| 日韩理论片中文av| 国产精品久久二区二区| 欧美不卡一区二区三区四区| 欧美在线一区二区三区| 91性感美女视频| 91在线一区二区| 成人精品在线视频观看| 国产成人午夜精品影院观看视频 | 国产成人免费网站| 秋霞影院一区二区| 青青草原综合久久大伊人精品优势 | 久久综合久久鬼色中文字| 日韩一级片在线观看| 日韩欧美精品在线| 久久综合色8888| 久久久久国产精品厨房| 久久精品一区二区三区av| 久久精品无码一区二区三区| 国产精品天美传媒沈樵| 国产精品久久久久久久第一福利| 国产精品美女久久久久久| 亚洲天堂网中文字| 亚洲一区二区三区四区在线免费观看| 樱桃视频在线观看一区| 亚洲.国产.中文慕字在线| 蜜桃av一区二区| 成人午夜免费电影| 在线成人免费观看| 国产精品女同互慰在线看|