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

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

?? bitmapmenu.cpp

?? 學生信息管理系統是典型的信息管理系統(MIS),其開發主要包括后臺數據庫的建立和維護以及前端應用程序的開發兩個方面。
?? CPP
字號:
#include "List.h"
#include <afxwin.h>
#include <afxcmn.h>
#include <afxtempl.h>
#include <BitmapMenu.h>


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

BMenuData::BMenuData()
{
	menuIconNormal = -1;
	menuIconSelected = -1;
	menuIconDisabled = -1;
	nID = 0;
}

CBitmapMenu::CBitmapMenu(CImageList* pList)
{
	SetImageList(pList);

	m_clrText =  GetSysColor(COLOR_MENUTEXT);
	m_clrBack = GetSysColor(COLOR_MENU);

	m_brBackground.CreateSolidBrush(m_clrBack);
	m_penBack.CreatePen(PS_SOLID,0,m_clrBack);

	m_bLBtnDown = FALSE;
	m_hilightStyle = Normal;
	m_clrHilight = GetSysColor(COLOR_HIGHLIGHT);
	m_brSelect.CreateSolidBrush(m_clrHilight);
	m_clrHilightText = GetSysColor(COLOR_HIGHLIGHTTEXT);
	ZeroMemory((LPVOID)&m_lf,sizeof(LOGFONT));
	
	NONCLIENTMETRICS nm;

	nm.cbSize = sizeof(NONCLIENTMETRICS);

	//Get the system metrics for the Captionfromhere

	VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS,0,&nm,0)); 
	m_lf =	nm.lfMenuFont;
	m_iMenuHeight = nm.iMenuHeight;
	m_fontMenu.CreateFontIndirect(&m_lf);
}

CBitmapMenu::~CBitmapMenu()
{
	DestroyMenu();
}

BOOL CBitmapMenu::DestroyMenu()
{
	// Destroy Sub menus:
	int m;
	
	for( m = m_SubMenus.GetUpperBound(); m >= 0; m-- )
		delete(m_SubMenus[m]);
	m_SubMenus.RemoveAll();
	
	// Destroy brushes:
	if( (HBRUSH)m_brBackground != NULL )
		m_brBackground.DeleteObject();
	if( (HFONT)m_fontMenu != NULL )
		m_fontMenu.DeleteObject();
	if( (HBRUSH)m_brSelect != NULL )
		m_brSelect.DeleteObject ();

	// Destroy menu data
	int numItems;
	
	numItems = m_MenuList.GetUpperBound();
	for( m = 0; m <= numItems; m++ )
		delete(m_MenuList[m]);
	m_MenuList.RemoveAll();

	// Call base-class implementation last:
	return(CMenu::DestroyMenu());
}

/*
=================================================================================
void CBitmapMenu::DrawItem(LPDRAWITEMSTRUCT)
---------------------------------------
Called by the framework when a particular item needs to be drawn.  We overide
this to draw the menu item in a custom-fashion, including icons and the 3D
rectangle bar.
=================================================================================
*/
void CBitmapMenu::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
	ASSERT(lpDIS != NULL);

	CDC* pDC;
	
	pDC = CDC::FromHandle(lpDIS->hDC);
	
	CRect rect;
	HICON hIcon;

	COLORREF clrText;

	clrText = m_clrText;
	
	// draw the colored rectangle portion		
	rect.CopyRect(&lpDIS->rcItem);
	
	// draw the up/down/focused/disabled state
	UINT action;
	UINT state;
	
	action = lpDIS->itemAction;
	state = lpDIS->itemState;

	CString strText;
	LOGFONT lf;
	
	lf = m_lf;
	
	CFont dispFont;
	CFont *pFont;

	if( lpDIS->itemData != NULL )
	{
		int nIconNormal = (((BMenuData*)(lpDIS->itemData))->menuIconNormal);
		int nIconSelected = (((BMenuData*)(lpDIS->itemData))->menuIconSelected);
		int nIconDisabled = (((BMenuData*)(lpDIS->itemData))->menuIconDisabled);

		strText = (((BMenuData*)(lpDIS->itemData))->menuText);

		if(nIconNormal == -1)
			hIcon = NULL;
		else
		{
			hIcon = NULL;

			// Obtain the IDs for the appropriate Icons:
			if( state & ODS_SELECTED && !(state & ODS_GRAYED) )
			{
				// Selected (but not disabled)
				if( nIconSelected != -1 )
					hIcon = m_pList->ExtractIcon(nIconSelected);
			}
			else
			{
				if( state & ODS_GRAYED )
					// Disabled (selected or not)
					if( nIconDisabled != -1 )
						hIcon = m_pList->ExtractIcon(nIconDisabled);
			}
			// If we didn't manage to select a specific icon, we'll use the
			// default (normal) one...
			if( hIcon == NULL )
				hIcon = m_pList->ExtractIcon(nIconNormal);
		}
	}
	else
	{
		strText.Empty();
		hIcon = NULL;
	}

	if( (state & ODS_SELECTED) )
	{
		// draw the down edges
		CPen *pOldPen = pDC->SelectObject(&m_penBack);

		// You need only Text highlight and thats what you get
		if( m_hilightStyle != Normal )
			pDC->FillRect(rect,&m_brBackground);
		else
			pDC->FillRect(rect,&m_brSelect);

		pDC->SelectObject(pOldPen);

		// This version provides a black-border:
		//pDC->Draw3dRect(rect,GetSysColor (COLOR_3DHILIGHT),RGB(0,0,0));
		//lf.lfWeight = FW_BOLD;
		if( (HFONT)dispFont != NULL )
			dispFont.DeleteObject();

		dispFont.CreateFontIndirect(&lf);
		clrText = m_clrHilightText;
	}
	else
	{
		CPen *pOldPen = pDC->SelectObject(&m_penBack);
		pDC->FillRect (rect,&m_brBackground);
		pDC->SelectObject (pOldPen);
		
		// draw the up edges
		pDC->Draw3dRect (rect,m_clrBack,m_clrBack);
		if( (HFONT)dispFont != NULL )
			dispFont.DeleteObject();

		dispFont.CreateFontIndirect(&lf);
	}

	// draw the text if there is any
	//We have to paint the text only if the image is nonexistant

	if (hIcon != NULL)
		DrawIconEx(pDC->GetSafeHdc(), rect.left,
					rect.top + (rect.Height() - m_nIconY) / 2, hIcon,
					m_nIconX, m_nIconY, 0, NULL, DI_NORMAL);

	rect.left = rect.left + m_nIconX + 2;

	if( !strText.IsEmpty() )
	{
		int iOldMode = pDC->GetBkMode();
		
		pDC->SetBkMode(TRANSPARENT);

		// Draw the text in the correct colour:
		UINT nFormat = DT_LEFT|DT_SINGLELINE|DT_EXPANDTABS|DT_VCENTER;

		if( !(lpDIS->itemState & ODS_GRAYED) )
		{
			pDC->SetTextColor(clrText);
			pDC->DrawText (strText,rect,nFormat);
		}
		else
		{
			// Draw the slightly lighter greyed text at an offset:
			RECT offset = *rect;

			offset.left += 1;
			offset.right += 1;
			offset.top += 1;
			offset.bottom += 1;

			pDC->SetTextColor(GetSysColor(COLOR_BTNHILIGHT));
			pDC->DrawText(strText,&offset, nFormat);

			// And the standard Grey text:
			pDC->SetTextColor(GetSysColor(COLOR_GRAYTEXT));
			pDC->DrawText(strText,rect, nFormat);
		}

		pFont = pDC->SelectObject(&dispFont);
		pDC->SetBkMode(iOldMode);
		pDC->SelectObject(pFont); //set it to the old font
	}
	dispFont.DeleteObject();
}

/*
	=================================================================================
	void CBitmapMenu::MeasureItem(LPMEASUREITEMSTRUCT)
	---------------------------------------------
	Called by the framework when it wants to know what the width and height of our
	item will be.  To accomplish this we provide the width of the icon plus the
	width of the menu text, and then the height of the icon.
	=================================================================================
*/
void CBitmapMenu::MeasureItem(LPMEASUREITEMSTRUCT lpMIS)
{
	// Obtain the width of the text:
	CWnd *pWnd = AfxGetMainWnd();						// Get main window
	CDC *pDC = pWnd->GetDC();							// Get device context
	CFont* pFont = pDC->SelectObject(&m_fontMenu);		// Select menu font in...
	LPCTSTR lpstrText = (((BMenuData*)(lpMIS->itemData))->menuText);	// Get pointer to text

	SIZE t;

	GetTextExtentPoint32(pDC->GetSafeHdc(), lpstrText, strlen(lpstrText), &t); // Width of caption

	pDC->SelectObject(pFont);		// Select old font in
	pWnd->ReleaseDC(pDC);			// Release the DC

	lpMIS->itemWidth = t.cx;
	lpMIS->itemHeight = max(GetSystemMetrics(SM_CYMENU), t.cy);

	lpMIS->itemWidth += m_nIconX;
	lpMIS->itemHeight = max(m_nIconY, lpMIS->itemHeight);
}

void CBitmapMenu::SetTextColor(COLORREF clrText)
{
	m_clrText = clrText;
}

void CBitmapMenu::SetBackColor(COLORREF clrBack)
{
	m_clrBack = clrBack;

	if( (HBRUSH)m_brBackground != NULL )
		m_brBackground.DeleteObject();
	m_brBackground.CreateSolidBrush (clrBack);
}

void CBitmapMenu::SetHighlightColor(COLORREF clrHilight)
{
	m_clrHilight = clrHilight;

	if( (HBRUSH)m_brSelect != NULL )
		m_brSelect.DeleteObject();
	m_brSelect.CreateSolidBrush(clrHilight);
}

void CBitmapMenu::SetHighlightTextColor(COLORREF clrHilightText)
{
	m_clrHilightText = clrHilightText;
}

void CBitmapMenu::SetHighlightStyle(HIGHLIGHTSTYLE hilightStyle)
{
	m_hilightStyle = hilightStyle;
}

void CBitmapMenu::SetImageList(CImageList* pList)
{
	m_pList = pList;

	if( m_pList != NULL )
	{
		IMAGEINFO info;;

		m_pList->GetImageInfo(0, &info);
		m_nIconX = info.rcImage.right - info.rcImage.left;
		m_nIconY = info.rcImage.bottom - info.rcImage.top;
	}
	else
	{
		m_nIconX = 0;
		m_nIconY = 0;
	}
}

/*
	=================================================================================
	BOOL CBitmapMenu::AppendODMenu(LPCTSTR, UINT, UINT, UINT, UINT)
	BOOL CBitmapMenu::ModifyODMenu(LPCTSTR, UINT, UINT, UINT, UINT)
	----------------------------------------------------------
	These 2 functions effectively replace the CMenu::AppendMenu() and CMenu::ModifyMenu()
	classes, with support for 3 icon states.  When using Owner-drawn menu items,
	use these functions instead of the usual ones.
	=================================================================================
*/
BOOL CBitmapMenu::AppendMenu(UINT nFlags,
							  UINT nID,
							  LPCTSTR lpstrText,
							  int nIconNormal,
							  int nIconSelected,
							  int nIconDisabled)
{
	if( (nFlags & MF_OWNERDRAW) != 0 || nIconNormal != -1 )
	{
		nFlags |= MF_OWNERDRAW;

		BMenuData *mdata = new BMenuData;
		m_MenuList.Add(mdata);

		lstrcpy(mdata->menuText, lpstrText);
		mdata->menuIconNormal = nIconNormal;
		mdata->menuIconSelected = nIconSelected;
		mdata->menuIconDisabled = nIconDisabled;
		return CMenu::AppendMenu(nFlags, nID, (LPCTSTR)mdata);
	}

	return CMenu::AppendMenu(nFlags, nID, lpstrText);
}

BOOL CBitmapMenu::ModifyODMenu(LPCTSTR lpstrText,
							  UINT nID,
							  int nIconNormal,
							  int nIconSelected,
							  int nIconDisabled)
{
	// Delete the existing BMenuData structure associated with this item (if any)
	int numMenuItems = m_MenuList.GetUpperBound();
	BMenuData *mdata;

	for( int m = 0; m <= numMenuItems; m++ )
	{
		if( (mdata = m_MenuList[m]) != NULL )
		{
			if( mdata->nID == nID )
			{
				delete(mdata);
				m_MenuList.RemoveAt(m);
				break;
			}
		}
	}
	
	// Create a new BMenuData structure:
	mdata = new BMenuData;
	m_MenuList.Add(mdata);

	lstrcpy(mdata->menuText, lpstrText);
	mdata->menuIconNormal = nIconNormal;
	mdata->menuIconSelected = nIconSelected;
	mdata->menuIconDisabled = nIconDisabled;

	return CMenu::ModifyMenu(nID, MF_BYCOMMAND | MF_OWNERDRAW, nID, (LPCTSTR)mdata);
}

BOOL CBitmapMenu::LoadMenu(LPCTSTR lpszResourceName)
{
	return CBitmapMenu::LoadMenu(MAKEINTRESOURCE(lpszResourceName));
}

BOOL CBitmapMenu::LoadMenu(int nResource)
{
	// Find the Menu Resource:
	DWORD dwSize;
	WORD wrd = MAKEWORD(nResource, 0);

	HRSRC hRsrc = FindResource(NULL, (LPCTSTR)wrd, RT_MENU);

	// Find the resource
	if( hRsrc == NULL )
	{
		TRACE0("CBitmapMenu::LoadMenu() - Failed to find Menu Resource\n");
		ASSERT(FALSE);
	}

	// Get size of resource:
	dwSize = SizeofResource(NULL, hRsrc);

	// Load the Menu Resource:
	HGLOBAL hGlobal = LoadResource(NULL, hRsrc);
	if( hGlobal == NULL )
	{
		TRACE0("CBitmapMenu::LoadMenu() - Failed to load Menu Resource\n");
		ASSERT(FALSE);
	}
	// Attempt to create us as a menu...
	if( !CMenu::CreateMenu() )
	{
		TRACE0("CBitmapMenu::LoadMenu() - Failed to create Menu\n");
		ASSERT(FALSE);
	}
	// Get Item template Header, and calculate offset of MENUITEMTEMPLATES
	MENUITEMTEMPLATEHEADER* pTpHdr = (MENUITEMTEMPLATEHEADER*)LockResource(hGlobal);
	BYTE*					pTp   = (BYTE*)pTpHdr + 
									(sizeof(MENUITEMTEMPLATEHEADER) + pTpHdr->offset);

	// Variables needed during processing of Menu Item Templates:
	BMenuData*	pData = NULL;							// New OD Menu Item Data
	WORD		dwFlags = 0;							// Flags of the Menu Item
	WORD		dwID	= 0;							// ID of the Menu Item
	BOOL		bLastPopup = 0; 						// Last popup?
	UINT		uFlags; 								// Actual Flags.
	char		caption[80];							// Allows up to 80 chars for caption
	int 		nLen   = 0; 							// Length of caption
	CTypedPtrArray<CPtrArray, CBitmapMenu*> m_Stack;		// Popup menu stack

	m_Stack.Add(this);									// Add it to this...
	
	do
	{
		// Obtain Flags and (if necessary), the ID...
		memcpy(&dwFlags, pTp, sizeof(WORD));
		pTp+=sizeof(WORD);
		
		// Obtain Flags
		if( !(dwFlags & MF_POPUP) )
		{
			memcpy(&dwID, pTp, sizeof(WORD));
			// Obtain ID
			pTp += sizeof(WORD);
		}
		else
			dwID = 0;

		uFlags = (UINT)dwFlags; 		// Remove MF_END from the flags that will
		if( uFlags & MF_END )			// be passed to the Append(OD)Menu functions.
			uFlags -= MF_END;
		// Obtain Caption (and length)
		nLen = 0;

		char *ch = (char*)pTp;
		while( *ch != 0 )
		{
			caption[nLen] = ch[0];
			nLen++; 					// Increment length
			ch+=2;						// Accounts for UNICODE '0's...
		}

		caption[nLen] = 0;				// Zero-terminate the string...
		pTp += (nLen+1) * 2;				// Increase Pointer...
		
		// Handle popup menus first....
		if( dwFlags & MF_POPUP )
		{
			if( dwFlags & MF_END )
				bLastPopup = TRUE;

			CBitmapMenu* pSubMenu = new CBitmapMenu;
			
			pSubMenu->CreatePopupMenu();
			
			// Append it to the top of the stack:
			m_Stack[m_Stack.GetUpperBound()]->AppendMenu(uFlags, (UINT)pSubMenu->m_hMenu, caption);
			m_Stack.Add(pSubMenu);					// Add to PopupStack
			m_SubMenus.Add(pSubMenu);				// For deletion...
		}
		else
		{
			m_Stack[m_Stack.GetUpperBound()]->AppendMenu(uFlags, dwID, caption, -1, -1, -1);
			if( dwFlags & MF_END )
				m_Stack.RemoveAt(m_Stack.GetUpperBound());	// Remove top of stack
			if(bLastPopup)
			{
				bLastPopup = FALSE;
				m_Stack.RemoveAt(m_Stack.GetUpperBound());	// And again...
			}
		}
	}
	while( m_Stack.GetUpperBound() != -1 );
	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品三级在线观看| 69堂成人精品免费视频| 91亚洲精品一区二区乱码| 91.com视频| 亚洲色图欧美偷拍| 国产福利电影一区二区三区| 在线免费不卡视频| 中文字幕久久午夜不卡| 日本亚洲最大的色成网站www| 成人综合婷婷国产精品久久免费| 在线电影一区二区三区| 亚洲欧美在线视频观看| 九九在线精品视频| 欧美另类videos死尸| 亚洲色图20p| 成人激情视频网站| 欧美xingq一区二区| 久久精品国产澳门| 欧日韩精品视频| 亚洲精品中文字幕乱码三区| 国产精品一品二品| 欧美精品一区二区三区四区 | 亚洲午夜成aⅴ人片| 丁香桃色午夜亚洲一区二区三区| 欧美一级艳片视频免费观看| 夜色激情一区二区| 色八戒一区二区三区| 欧美高清在线视频| 懂色av一区二区三区免费观看| 日韩精品一区二区三区视频在线观看 | 在线观看免费视频综合| 亚洲欧洲性图库| www.色精品| 亚洲男人的天堂在线观看| 成人福利视频网站| 成人欧美一区二区三区视频网页 | 成人精品视频.| 亚洲国产精品v| 国产一区二区0| 精品国产免费人成电影在线观看四季| 青青青爽久久午夜综合久久午夜| 在线成人免费观看| 日本视频免费一区| 日韩欧美一级片| 国产乱码精品一区二区三区av | 91精品国产综合久久久久| 亚洲 欧美综合在线网络| 欧美色老头old∨ideo| 天堂影院一区二区| 欧美电影精品一区二区| 国产精品99久久久| 亚洲精品国产一区二区三区四区在线| 91久久精品网| 婷婷久久综合九色综合伊人色| 日韩视频在线永久播放| 国产精品自产自拍| 亚洲精品久久7777| 日韩天堂在线观看| 高清国产午夜精品久久久久久| 国产精品国产a级| 欧美日韩卡一卡二| 美女视频黄免费的久久| 国产欧美日韩激情| 日本道免费精品一区二区三区| 污片在线观看一区二区| 久久久久久久久久久久久久久99| av一区二区不卡| 日韩av一二三| 国产精品传媒入口麻豆| 91精品久久久久久久久99蜜臂| 岛国av在线一区| 天堂va蜜桃一区二区三区| 国产欧美一二三区| 欧美日本国产一区| 9i看片成人免费高清| 首页欧美精品中文字幕| 日本一区二区久久| 在线综合亚洲欧美在线视频 | 免费成人在线影院| 国产精品国产三级国产普通话蜜臀| 欧美三级中文字幕在线观看| 国产一区二区精品久久91| 亚洲综合自拍偷拍| 久久久蜜桃精品| 91 com成人网| 99在线热播精品免费| 免费观看成人av| 亚洲国产美女搞黄色| 欧美国产精品专区| 欧美tickling挠脚心丨vk| 一本到不卡精品视频在线观看| 黄色日韩三级电影| 午夜精品久久久久影视| 亚洲图片你懂的| 久久嫩草精品久久久精品| 欧美老肥妇做.爰bbww| 99国产精品国产精品毛片| 韩日av一区二区| 视频一区视频二区中文字幕| 怡红院av一区二区三区| 中文无字幕一区二区三区| 精品久久久久久久一区二区蜜臀| 欧美无砖砖区免费| 日本国产一区二区| 91免费国产在线观看| www.欧美日韩国产在线| 国产精品亚洲综合一区在线观看| 久久99国产精品尤物| 日精品一区二区| 爽好多水快深点欧美视频| 亚洲国产精品影院| 五月综合激情婷婷六月色窝| 一个色妞综合视频在线观看| 1000精品久久久久久久久| 国产精品天天看| 国产精品的网站| 中文字幕人成不卡一区| 国产精品国产三级国产专播品爱网 | 日韩毛片视频在线看| 国产精品久久久久久久蜜臀| 中文字幕欧美三区| 国产精品视频看| 亚洲天堂精品视频| 亚洲日本丝袜连裤袜办公室| 肉色丝袜一区二区| 五月婷婷激情综合| 日本在线观看不卡视频| 极品少妇xxxx偷拍精品少妇| 美女网站色91| 国产成人鲁色资源国产91色综| 国产成人午夜99999| a美女胸又www黄视频久久| 99天天综合性| 欧美日韩亚洲另类| 欧美一级二级三级乱码| 久久久久国产精品厨房| 综合在线观看色| 午夜亚洲福利老司机| 男人操女人的视频在线观看欧美| 精彩视频一区二区| 成人高清av在线| 欧美另类高清zo欧美| 久久久久久久综合色一本| 国产精品久久久久久久久图文区| 亚洲影院理伦片| 久久成人18免费观看| 成人午夜视频在线观看| 欧美日韩高清一区二区| 久久久国产午夜精品| 亚洲欧洲精品成人久久奇米网| 午夜日韩在线电影| 国产成人精品三级麻豆| 在线观看不卡视频| 久久久久久亚洲综合| 亚洲一区二区三区三| 久久国产精品区| 色综合天天综合网天天看片| 欧美一级艳片视频免费观看| 中文字幕av资源一区| 丝袜美腿一区二区三区| 成人免费毛片a| 欧美一区二区三区男人的天堂| 中文字幕乱码日本亚洲一区二区 | 欧美精选午夜久久久乱码6080| 欧美不卡一区二区三区四区| 亚洲色图制服丝袜| 国内成人精品2018免费看| 色94色欧美sute亚洲线路二| 精品免费国产一区二区三区四区| 一级中文字幕一区二区| 国产91精品精华液一区二区三区| 欧美日韩www| 综合中文字幕亚洲| 国产黑丝在线一区二区三区| 欧美日韩国产色站一区二区三区| 国产日韩欧美a| 捆绑调教美女网站视频一区| 91成人免费在线视频| 日本一区二区综合亚洲| 久久99精品久久久久久| 欧美日韩大陆一区二区| 国产精品久久久久久妇女6080| 精品一区二区三区免费视频| 欧美精品 日韩| 亚洲h在线观看| 欧美中文字幕亚洲一区二区va在线 | 日韩一级完整毛片| 亚洲成人av在线电影| 在线观看区一区二| 亚洲综合在线视频| 一本色道久久综合亚洲aⅴ蜜桃| 久久久影院官网| 久久99精品久久只有精品| 欧美一卡2卡三卡4卡5免费| 亚洲综合激情另类小说区| 91女人视频在线观看| 亚洲欧美日韩一区二区 | 国产一区二区福利| 精品国产成人系列| 精品一区二区三区蜜桃|