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

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

?? menuex.cpp

?? vc++_完美實現真彩自繪菜單chengxudaima其可以實現多彩的菜單
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
#include "stdafx.h"
#include "MenuEx.h"

IMPLEMENT_DYNAMIC( CMenuEx, CMenu )

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMenuEx::CMenuEx()
{
	m_bPopupMenu=FALSE;					// initialize this menu flag
										// FALSE indicate this menu is top-level menu
										// TRUE means this menu is popupmenu

	m_nSeparator = 10;					// separator menu item 's height

	// initialize color attribute
	m_crBackground = ::GetSysColor(COLOR_MENU);	
	m_crText =::GetSysColor(COLOR_MENUTEXT);
	m_crTextSelected =::GetSysColor(COLOR_MENUTEXT);
	m_crLeft=RGB(236,233,216);
	m_crSelectedBroder=RGB(49,106,197);
	m_crSelectedFill=RGB(200,220,253);

	// no normal imagelist
	m_pImageList=NULL;					
	m_pDisabledImageList=NULL;			
	m_pHotImageList=NULL;		
	
	// default menu image size
	m_szImage=CSize(20,20);				
}
/////////////////////////////////////////////////////////////////////////////
CMenuEx::~CMenuEx()
{	
	// destroy menu and free all variable
	DestroyMenu();	
}
/////////////////////////////////////////////////////////////////////////////

BOOL CMenuEx::DestroyMenu()
{	
	// delete all imagelist
	if(m_pImageList!=NULL)
		m_pImageList->DeleteImageList();

	if(m_pDisabledImageList!=NULL)
		m_pDisabledImageList->DeleteImageList();

	if(m_pHotImageList!=NULL)
		m_pHotImageList->DeleteImageList();		


	for(int i = 0; i < m_MenuItemArr.GetSize(); i++)
	{
		MENUITEM *pMenuItem = m_MenuItemArr.GetAt(i);
		
		// destroy submenu
		if(pMenuItem->bIsSubMenu)
			pMenuItem->pSubMenu->DestroyMenu(); 		
		
		// remove menu item from array
		m_MenuItemArr.RemoveAt(i);
		
		// free menuitem struct
		delete pMenuItem;
	}	
	return CMenu::DestroyMenu();
}
/////////////////////////////////////////////////////////////////////////////
BOOL CMenuEx::LoadMenu(UINT nIDResource)
{
	// load menu from menu editor created resouce
	CMenu Menu;
	Menu.LoadMenu(nIDResource);

	// empty all variable
	if(m_hMenu!=NULL)	
		DestroyMenu();	
		
	if(m_bPopupMenu)
	{
		// create popupmenu
		if(!CreatePopupMenu()) 
			return FALSE;	
	}
	else
	{
		// create top-level menu  
		if(!CreateMenu()) 
			return FALSE; 
	}		
	return LoadMenu(Menu);
}
/////////////////////////////////////////////////////////////////////////////
BOOL CMenuEx::LoadMenu(HMENU hMenu)
{
	// load menu from global HMENU handle
	CMenu Menu;
	Menu.Attach(hMenu);
	
	// empty all variable
	if(m_hMenu!=NULL)	
		DestroyMenu();	
	
	if(m_bPopupMenu)
	{
		// create popupmenu
		if(!CreatePopupMenu()) 
			return FALSE;	
	}
	else
	{
		// create top-level menu  
		if(!CreateMenu()) 
			return FALSE; 
	}	
	return LoadMenu(Menu);
}
/////////////////////////////////////////////////////////////////////////////
BOOL CMenuEx::LoadMenu(LPCTSTR lpszResourceName)
{
	// load menu from resource string
	CMenu Menu;
	Menu.LoadMenu(lpszResourceName);
	
	// empty all variable
	if(m_hMenu!=NULL)	
		DestroyMenu();	
	
	if(m_bPopupMenu)
	{
		// create popupmenu
		if(!CreatePopupMenu()) 
			return FALSE;	
	}
	else
	{
		// create top-level menu  
		if(!CreateMenu()) 
			return FALSE; 
	}	
	return LoadMenu(Menu);
}
/////////////////////////////////////////////////////////////////////////////
BOOL CMenuEx::LoadMenu(CMenu& Menu)
{	
	UINT nID;
	UINT nIndex;	
	UINT nState;
	CString strMenu;

	// fill this menu use temp menu
	for(nIndex = 0; nIndex < Menu.GetMenuItemCount(); nIndex++)
	{		
		nID=Menu.GetMenuItemID(nIndex);					// get menu ID
		nState=Menu.GetMenuState(nIndex,MF_BYPOSITION);	// get menu state
		Menu.GetMenuString(nIndex,strMenu,MF_BYPOSITION);// get menu name
		
		if(nID==0)
		{	
			// insert separator
			if(!AppendMenu(MF_SEPARATOR))
				return FALSE;
		}
		else if(nID==-1)
		{
			// bypass popupmenu's item number	
			nState&=0x00FFL;	
			
			// insert popupmenu
			if(!AppendMenu(MF_POPUP|nState,(UINT)Menu.GetSubMenu(nIndex)->Detach(),strMenu))
				return FALSE;
		}
		else
		{		
			// insert normal menu item
			if(!AppendMenu(MF_STRING|nState,nID,strMenu))
				return FALSE;
		}
	}		
	return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
BOOL CMenuEx::AppendMenu(UINT nFlags, UINT nIDNewItem, LPCTSTR lpszNewItem )
{	
	// append ownerdrawn style menu item to this menu
	// get last position of this menu
	UINT nIndex=m_MenuItemArr.GetSize();
	
	// insert menu item to last position
	// means append menu item
	return InsertMenu(nIndex,nFlags|MF_BYPOSITION,nIDNewItem,lpszNewItem);	
}

/////////////////////////////////////////////////////////////////////////////
BOOL CMenuEx::InsertMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem , LPCTSTR lpszNewItem )
{
	// insert menu item to specific position or command ID
	LPMENUITEM pMenuItem;
	UINT nIndex;
	CSize  size;	
	
	// mainframe's device context,use to get text size
	CDC	 *pDC =AfxGetMainWnd()->GetDC();

	if(nFlags & MF_BYPOSITION)
	{
		// insert menu item by position
		pMenuItem=new MENUITEM;

		if(nFlags&MF_SEPARATOR)
		{
			// insert separator
			pMenuItem->strText = "";						// no name
			pMenuItem->nID = 0;								// separator's ID
			pMenuItem->itemSize=CSize(0,m_nSeparator);		// separator's default size
			pMenuItem->pImageList=NULL;						// separator has no image
			pMenuItem->pDisabledImageList=NULL;
			pMenuItem->pHotImageList=NULL;
			pMenuItem->nImageIndex=-1;
			pMenuItem->bIsSubMenu=FALSE;					// separator must not be popupmenu
			pMenuItem->pSubMenu=NULL;				
			
			// insert menu item to this menu
			if(!CMenu::InsertMenu(nPosition,nFlags,nIDNewItem,lpszNewItem))
			{
				delete pMenuItem;
				AfxGetMainWnd()->ReleaseDC(pDC);
				return FALSE;
			}
			
			if(m_bPopupMenu)
			{			
				// modify menu item to ownerdrawn style
				// if this menu is not a top-level menu
				if(!CMenu::ModifyMenu(nPosition,MF_SEPARATOR|MF_BYPOSITION|MF_OWNERDRAW,0,(LPCTSTR)pMenuItem))
				{
					delete pMenuItem;
					AfxGetMainWnd()->ReleaseDC(pDC);
					return FALSE;
				}
			}			
			// insert menu item to array
			m_MenuItemArr.InsertAt(nPosition,pMenuItem);
		}
		else if(nFlags&MF_POPUP)
		{
			// insert popupmenu
			CMenuEx* pSubMenu=new CMenuEx;

			// create new popupmenu
			pSubMenu->SetPopupMenu(TRUE);

			// load popupmenu from specific handle
			pSubMenu->LoadMenu((HMENU)nIDNewItem);
			size=pDC->GetTextExtent(lpszNewItem);

			pMenuItem->strText = lpszNewItem;
			pMenuItem->nID = -1;	
			
			// specified menu item size,do not include image's size
			pMenuItem->itemSize.cx=size.cx+25;
			pMenuItem->itemSize.cy=2;
			
			// specified all imagelist for new menu item
			pMenuItem->pImageList=m_pImageList;		
			pMenuItem->pDisabledImageList=m_pDisabledImageList;
			pMenuItem->pHotImageList=m_pHotImageList;
			pMenuItem->nImageIndex=-1;
			pMenuItem->bIsSubMenu=TRUE;
			pMenuItem->pSubMenu=pSubMenu;		// popupmenu's pointor				
			
			if(!CMenu::InsertMenu(nPosition,nFlags,(UINT)(pSubMenu->m_hMenu),lpszNewItem))
			{
				delete pMenuItem;
				AfxGetMainWnd()->ReleaseDC(pDC);
				return FALSE;
			}
			
			if(m_bPopupMenu)
			{			
				if(!CMenu::ModifyMenu(nPosition,nFlags|MF_POPUP|MF_BYPOSITION|MF_OWNERDRAW,(UINT)(pSubMenu->m_hMenu),(LPCTSTR)pMenuItem))
				{
					delete pMenuItem;
					AfxGetMainWnd()->ReleaseDC(pDC);
					return FALSE;
				}
			}			
			m_MenuItemArr.InsertAt(nPosition,pMenuItem);
		}
		else // if(nFlags & MF_STRING)
		{
			// insert normal menu item
			size=pDC->GetTextExtent(lpszNewItem);

			pMenuItem->strText = lpszNewItem;
			pMenuItem->nID = nIDNewItem;			
			pMenuItem->itemSize.cx=size.cx+10;
			pMenuItem->itemSize.cy=2;		
			pMenuItem->pImageList=m_pImageList;		
			pMenuItem->pDisabledImageList=m_pDisabledImageList;
			pMenuItem->pHotImageList=m_pHotImageList;
			pMenuItem->nImageIndex=-1;
			pMenuItem->bIsSubMenu=FALSE;
			pMenuItem->pSubMenu=NULL;					
			
			if(!CMenu::InsertMenu(nPosition,nFlags,nIDNewItem,lpszNewItem))
			{
				delete pMenuItem;
				AfxGetMainWnd()->ReleaseDC(pDC);
				return FALSE;
			}			
			if(m_bPopupMenu)
			{			
				if(!CMenu::ModifyMenu(nPosition,MF_BYPOSITION|MF_OWNERDRAW,nIDNewItem,(LPCTSTR)pMenuItem))
				{
					delete pMenuItem;
					AfxGetMainWnd()->ReleaseDC(pDC);
					return FALSE;
				}
			}
			m_MenuItemArr.InsertAt(nPosition,pMenuItem);
		}			
		return TRUE;
	}
	else if(nFlags & MF_BYCOMMAND)		// insert menu item by command ID
	{		
		for(nIndex = 0; nIndex < (UINT)m_MenuItemArr.GetSize(); nIndex++)
		{
			pMenuItem=m_MenuItemArr.GetAt(nIndex);
			
			// insert menu item with position
			// if the position match command ID
			if(pMenuItem->nID == nPosition)
				return InsertMenu(nIndex,MF_BYPOSITION,nIDNewItem,lpszNewItem);					
		}

		// do not found menu item in this menu
		CMenuEx* pSubMenu=FindPopupMenuFromID(nPosition);

		if(pSubMenu==NULL)
		{
			// not found 
			AfxGetMainWnd()->ReleaseDC(pDC);
			return FALSE;
		}
		else
		{
			// insert menu item to submenu
			return pSubMenu->InsertMenu(nPosition,nFlags,nIDNewItem ,lpszNewItem);
		}		
	}	

	AfxGetMainWnd()->ReleaseDC(pDC);
	return FALSE;
}
/////////////////////////////////////////////////////////////////////////////

BOOL CMenuEx::RemoveMenu(UINT nPosition, UINT nFlags)
{	
	UINT nIndex;
	LPMENUITEM pMenuItem;

	// remove menu item by position
	if(nFlags & MF_BYPOSITION)
	{
		// position out of range of menu item array
		if(nPosition>(UINT)(m_MenuItemArr.GetSize()-1))
			return FALSE;

		// remove menu item from menu item array
		m_MenuItemArr.RemoveAt(nPosition);
				
		// remvoe menu item from this menu
		if(!CMenu::RemoveMenu(nPosition,nFlags))
			return FALSE;
	}
	else if(nFlags & MF_BYCOMMAND)
	{
		// remove menu item by command ID

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产麻豆视频一区| 久久亚洲精品国产精品紫薇| 日韩午夜激情视频| 综合久久久久久久| 狠狠色狠狠色合久久伊人| 97久久久精品综合88久久| 日韩欧美亚洲国产精品字幕久久久| 国产精品美女久久久久aⅴ国产馆| 婷婷久久综合九色综合绿巨人| 成人中文字幕电影| 日韩精品一区二区三区视频| 亚洲永久精品大片| 91网上在线视频| 国产免费观看久久| 国产一二精品视频| 日韩欧美的一区| 午夜激情久久久| 国产精品亚洲视频| 91精品蜜臀在线一区尤物| 日韩一区在线看| 精品一区二区在线看| 欧美亚洲丝袜传媒另类| 国产精品久久久久一区| 福利一区二区在线观看| 久久久久久久久久久久久女国产乱 | 在线看一区二区| 国产日韩欧美精品电影三级在线 | 亚洲美女在线国产| 成人精品鲁一区一区二区| 日韩三级在线观看| 免费看欧美女人艹b| 欧美视频在线观看一区| 亚洲精品乱码久久久久久| 99在线精品免费| 国产精品色在线| av电影一区二区| 亚洲欧洲色图综合| 9久草视频在线视频精品| 另类小说欧美激情| 日韩视频123| 免费在线观看一区| 日韩色在线观看| 久久超级碰视频| 久久综合九色综合97婷婷| 国产精品一二三区在线| 国产肉丝袜一区二区| 激情av综合网| 色噜噜狠狠色综合欧洲selulu| av午夜精品一区二区三区| 国产日韩三级在线| 成人av片在线观看| 亚洲制服丝袜一区| 日韩一区二区在线观看| 国产一区二区0| 亚洲视频一区二区在线| 欧美日韩三级在线| 激情图片小说一区| 亚洲日本va午夜在线电影| 精品视频资源站| 另类小说欧美激情| 国产精品美女久久久久aⅴ| 在线看国产日韩| 精品一区精品二区高清| 成人欧美一区二区三区在线播放| 91麻豆自制传媒国产之光| 午夜电影网一区| 国产三级三级三级精品8ⅰ区| 99视频有精品| 蜜桃av一区二区在线观看| 国产午夜精品理论片a级大结局 | 色噜噜夜夜夜综合网| 日韩精品乱码av一区二区| 日韩精品一区二区三区四区 | 国产综合色视频| 亚洲人被黑人高潮完整版| 91精品国产高清一区二区三区 | aaa欧美日韩| 秋霞成人午夜伦在线观看| 成人小视频在线| 亚洲欧美日韩国产手机在线| 91福利国产精品| 久久不见久久见免费视频7| 欧美国产亚洲另类动漫| 日本道免费精品一区二区三区| 亚洲蜜臀av乱码久久精品 | 在线亚洲高清视频| 免费一区二区视频| 国产亚洲午夜高清国产拍精品 | 亚洲区小说区图片区qvod| 欧美高清一级片在线| 成人av影院在线| 亚洲成人免费电影| 26uuu色噜噜精品一区| 欧美日韩另类一区| 豆国产96在线|亚洲| 日韩精品国产欧美| 国产精品久久久久毛片软件| 欧美丝袜丝nylons| 国产福利91精品一区二区三区| 一区二区三区中文字幕| 欧美一区二区国产| 在线精品视频免费播放| 紧缚捆绑精品一区二区| 亚洲综合免费观看高清完整版在线 | 日韩一区在线看| 久久久久久久综合狠狠综合| 欧美一区二区三区喷汁尤物| 91色.com| 91国模大尺度私拍在线视频| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 在线免费观看视频一区| 成人免费高清视频| 懂色av一区二区夜夜嗨| 国产一区二区三区久久悠悠色av| 久久91精品国产91久久小草| 丝袜亚洲另类欧美综合| 亚洲韩国精品一区| 亚洲欧美日韩国产中文在线| 日韩欧美精品在线| 欧美巨大另类极品videosbest| 91免费在线视频观看| 成人激情黄色小说| 国产成人午夜99999| 激情综合色播激情啊| 麻豆精品视频在线观看免费| 亚洲一区二区在线观看视频| 亚洲成人久久影院| 亚洲第一成人在线| 香蕉成人啪国产精品视频综合网| 亚洲欧美福利一区二区| 国产精品拍天天在线| 中文字幕av在线一区二区三区| 精品国产乱码久久久久久老虎| 欧美丝袜丝交足nylons图片| 欧美三级韩国三级日本三斤| 欧洲精品一区二区三区在线观看| a级精品国产片在线观看| a在线欧美一区| 色乱码一区二区三区88| 国产91丝袜在线播放九色| 91网站最新地址| 欧美日韩视频一区二区| 91精品国产福利在线观看| 在线看国产一区二区| 欧美丰满高潮xxxx喷水动漫| 日韩久久精品一区| www国产亚洲精品久久麻豆| 国产喷白浆一区二区三区| 日韩欧美中文字幕一区| 国产精品无人区| 一区二区三区中文字幕| 日韩国产在线一| 国产精品自在欧美一区| caoporn国产精品| 欧洲精品中文字幕| 欧美精品粉嫩高潮一区二区| 精品国产乱码久久久久久浪潮| 国产精品美女久久久久久2018 | 国产一二精品视频| 成人a级免费电影| 欧美理论电影在线| 成人自拍视频在线观看| 91精品国产手机| 一区二区三区日韩精品| 美日韩一区二区| 欧亚一区二区三区| 精品日韩99亚洲| 天堂蜜桃91精品| 成人午夜视频在线| 精品国产乱码久久| 亚洲伊人色欲综合网| 成人永久看片免费视频天堂| 欧美色窝79yyyycom| 国产精品福利在线播放| 亚洲一区二区在线视频| 97久久人人超碰| 欧美一级高清大全免费观看| 亚洲精品一二三| 成人激情校园春色| 精品久久久久久亚洲综合网| 亚洲123区在线观看| 成人av电影免费观看| 久久久亚洲午夜电影| 亚洲第一搞黄网站| caoporen国产精品视频| 欧美精品一区二区高清在线观看| 中文字幕一区二区在线播放| 久久av老司机精品网站导航| 色婷婷综合视频在线观看| 久久亚洲精品国产精品紫薇| 日韩av电影天堂| 色8久久精品久久久久久蜜| 综合久久久久久久| 国产精品自拍av| 日韩片之四级片| 婷婷亚洲久悠悠色悠在线播放| 色吧成人激情小说| 国产欧美一区二区精品性色超碰| 蜜臀久久99精品久久久画质超高清| 欧洲精品中文字幕|