亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
91久久精品午夜一区二区| 视频一区二区三区在线| 国产福利精品一区| 99精品欧美一区二区三区综合在线| 欧美日本在线一区| 亚洲mv在线观看| 欧美日韩中文一区| 亚洲午夜私人影院| 91国内精品野花午夜精品 | 国产乱码精品一区二区三区av| 日av在线不卡| 成人黄色软件下载| 亚洲成人综合在线| 欧美一级专区免费大片| 亚洲成人激情自拍| 日韩精品在线看片z| 精品综合免费视频观看| 精品久久久久久久久久久久久久久| 国产福利一区二区三区视频在线| 亚洲主播在线播放| 国产白丝网站精品污在线入口| 欧美性极品少妇| 日产国产高清一区二区三区 | 中文字幕一区二区三中文字幕| 国产成人午夜高潮毛片| 亚洲乱码中文字幕| 6080yy午夜一二三区久久| 国产一区二区三区黄视频| 国产精品短视频| 久久久久九九视频| 亚洲va国产va欧美va观看| 国产精品1区2区3区在线观看| 国产欧美日韩三级| 欧美群妇大交群中文字幕| 成人一区在线看| 色综合久久久久综合体| 久久久久久久久伊人| 一本一本大道香蕉久在线精品 | 亚洲电影你懂得| 中文字幕一区在线观看| 久久久噜噜噜久噜久久综合| 2021中文字幕一区亚洲| 久久久影视传媒| 国产欧美日韩综合| 亚洲柠檬福利资源导航| 欧美亚洲国产一区在线观看网站| www.亚洲人| 欧美丰满少妇xxxbbb| 麻豆91免费观看| 久久综合狠狠综合久久综合88| 欧美日韩国产高清一区二区三区 | 日韩精品在线网站| www国产亚洲精品久久麻豆| 国产人成亚洲第一网站在线播放 | 欧美性欧美巨大黑白大战| 国产69精品一区二区亚洲孕妇| 人妖欧美一区二区| 九色综合狠狠综合久久| 天天操天天色综合| 日本成人在线视频网站| 久久成人综合网| 国产精品夜夜嗨| 欧美三级三级三级| 精品国产髙清在线看国产毛片| 国产精品国产三级国产a| 久久99久久精品| 欧美videos大乳护士334| 亚洲国产高清aⅴ视频| 2023国产一二三区日本精品2022| 日韩一区二区高清| 日韩欧美国产精品| 国产日韩av一区| 136国产福利精品导航| 亚洲另类春色校园小说| 亚洲成av人影院| 国产毛片精品视频| a在线欧美一区| 欧美日韩一本到| 久久先锋影音av鲁色资源| 国产日韩av一区二区| 亚洲欧美视频在线观看| 国产一区二区视频在线| 在线观看亚洲精品视频| 中文字幕av免费专区久久| 国产一二三精品| 亚洲精品在线网站| 视频在线观看一区| 91成人免费网站| 一色桃子久久精品亚洲| 国产成人一区在线| 制服丝袜中文字幕一区| 亚洲国产精品嫩草影院| 色香蕉成人二区免费| 国产精品久久二区二区| 国产精品18久久久久久久网站| 欧美一级爆毛片| 美女网站在线免费欧美精品| 4438x亚洲最大成人网| 中文字幕欧美激情| 国产精品资源在线看| 99国产麻豆精品| 91精品综合久久久久久| 韩日av一区二区| 一区二区三区欧美激情| 欧美mv日韩mv亚洲| 91蜜桃视频在线| 美美哒免费高清在线观看视频一区二区| 日韩欧美中文一区二区| 国产91清纯白嫩初高中在线观看| 国产欧美中文在线| 国产精品一区专区| 久久久久久久久99精品| 91亚洲永久精品| 亚洲成人黄色影院| 欧美tk丨vk视频| 91丝袜国产在线播放| 日本va欧美va欧美va精品| 国产日产欧产精品推荐色| 色视频一区二区| 国产呦萝稀缺另类资源| 亚洲情趣在线观看| 欧美精品一区二区三区在线播放| 91在线国产福利| 国产乱码字幕精品高清av| 五月婷婷欧美视频| 亚洲欧洲av色图| 久久亚洲精品国产精品紫薇| 欧美主播一区二区三区| 国产精品99久久久久| 午夜视频在线观看一区二区三区 | 91丨porny丨中文| 日韩成人dvd| 亚洲国产美国国产综合一区二区| 欧美一级爆毛片| 精品国产91久久久久久久妲己| 成人免费视频caoporn| 成人黄色777网| 成人爽a毛片一区二区免费| 97精品国产露脸对白| 91久久精品国产91性色tv| 欧美视频日韩视频| 日韩精品中文字幕一区| 久久奇米777| 亚洲黄色录像片| 日韩在线a电影| 丁香啪啪综合成人亚洲小说| 成人久久18免费网站麻豆 | 亚洲视频免费观看| 亚洲成人动漫在线观看| 美女任你摸久久| 99热这里都是精品| 欧美日韩精品一区二区| 久久精品人人爽人人爽| 一区二区三区丝袜| 国内外精品视频| 欧美手机在线视频| 国产欧美日韩在线观看| 丝袜美腿亚洲一区二区图片| 国产乱码一区二区三区| 欧美精品久久天天躁| 一区二区三区在线观看欧美 | 懂色av一区二区夜夜嗨| 欧美剧情片在线观看| 欧美成人性战久久| 亚洲精品水蜜桃| 国产精品一区二区视频| 日本韩国欧美三级| 久久综合九色综合97婷婷女人 | 亚洲成a人片在线不卡一二三区| 六月丁香综合在线视频| 成人免费视频视频| 亚洲精品在线免费播放| 亚洲综合在线免费观看| 激情综合亚洲精品| 欧美精选在线播放| 亚洲免费观看在线观看| 国产一二精品视频| 欧美本精品男人aⅴ天堂| 五月婷婷综合在线| 欧美色老头old∨ideo| 亚洲天堂a在线| 91美女在线观看| 最新国产精品久久精品| 国产福利一区二区| 久久久精品免费免费| 国产主播一区二区三区| 精品久久久久久久久久久久久久久| 久久91精品久久久久久秒播| 日韩高清一区二区| 欧美精三区欧美精三区| 裸体歌舞表演一区二区| 久久午夜羞羞影院免费观看| 国产电影一区二区三区| 国产精品黄色在线观看| 在线观看视频一区| 国产精品一区二区久久不卡 | 日本三级亚洲精品| 成人黄色a**站在线观看| 久久久久97国产精华液好用吗| 日本欧美一区二区|