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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? menuxp.cpp

?? 復(fù)件 類似WindowsXP中菜單,有左邊的豎條,有圖形,有圖形背景,工具條菜單,等
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
	pDC->LineTo(pt3);
	pt1.Offset(0, 1);
	pt2.Offset(0, 1);
	pt3.Offset(0, 1);
	pDC->MoveTo(pt1);
	pDC->LineTo(pt2);
	pDC->LineTo(pt3);
	pDC->SelectObject(pOldPen);
}

//Draw menu text
void CMenuXP::DrawText(CDC *pDC, CRect rect, CString strText, BOOL bSelected, BOOL bDisabled, BOOL bBold)
{
	CFont*	pOldFont;
	CFont	fontBold;

	if (bBold)
	{
		LOGFONT	logFont;
		m_fontMenu.GetLogFont(&logFont);
		logFont.lfWeight = FW_BOLD;
		fontBold.CreateFontIndirect(&logFont);

		pOldFont = pDC->SelectObject(&fontBold);
	}
	else
	{
		pOldFont = pDC->SelectObject(&m_fontMenu);
	}

	pDC->SetBkMode(TRANSPARENT);
	if (bDisabled && (!bSelected || m_Style == STYLE_XP))
	{
		DrawMenuText(*pDC, rect + CPoint(1, 1), strText, m_clrSelectedText);
	}
	if (bDisabled)
	{
		DrawMenuText(*pDC, rect, strText, m_clrDisabledText);
	}
	else
	{
		DrawMenuText(*pDC, rect, strText, bSelected? m_clrSelectedText : m_clrText);
	}

	pDC->SelectObject(pOldFont);

	if (bBold)
		fontBold.DeleteObject();
}

//set menu font
BOOL CMenuXP::SetMenuFont(LOGFONT	lgfont)
{
	m_fontMenu.DeleteObject();
	return m_fontMenu.CreateFontIndirect(&lgfont);
}


//clear all memory and handles
void CMenuXP::Clear(void)
{
	if (m_hBitmap)
	{
		DeleteObject(m_hBitmap);
		m_hBitmap = NULL;
	}
	UINT	nCount = GetMenuItemCount();
	for (UINT i=0; i<nCount; i++)
	{
		MENUITEMINFO	info;
		memset(&info, 0, sizeof(MENUITEMINFO));
		info.cbSize = sizeof(MENUITEMINFO);
		info.fMask = MIIM_DATA | MIIM_TYPE;
		GetMenuItemInfo(i, &info, TRUE);
		
		CMenuXPItem *pData = (CMenuXPItem *)info.dwItemData;
		if ((info.fType & MFT_OWNERDRAW) && pData && pData->IsMyData())
		{
			delete pData;
		}

		CMenu	*pSubMenu = GetSubMenu(i);
		if (pSubMenu && pSubMenu->IsKindOf(RUNTIME_CLASS(CMenuXP)))
			delete pSubMenu;
	}
}

//draw embossed icon for the disabled item
const DWORD		MAGICROP		= 0xb8074a;
const COLORREF CWHITE  = RGB(255,255,255);

void CMenuXP::DrawEmbossed(CDC *pDC, HICON hIcon, CRect rect, BOOL bColor, BOOL bShadow)
{
	CDC	memdc;
	memdc.CreateCompatibleDC(pDC);
	int cx = rect.Width();
	int cy = rect.Height();


	// create mono or color bitmap
	CBitmap bm;
	if (bColor)
		bm.CreateCompatibleBitmap(pDC, cx, cy);
	else
		bm.CreateBitmap(cx, cy, 1, 1, NULL);

	// draw image into memory DC--fill BG white first
	CBitmap* pOldBitmap = memdc.SelectObject(&bm);
	//FillRect(&memdc, CRect(0, 0, cx, cy), m_clrBackGround);
	memdc.PatBlt(0, 0, cx, cy, WHITENESS);
	::DrawIconEx(memdc.m_hDC, 0, 0, hIcon, cx, cy, 1, NULL, DI_NORMAL);

	// This seems to be required. Why, I don't know. ???
	COLORREF colorOldBG = pDC->SetBkColor(CWHITE);

	// Draw using hilite offset by (1,1), then shadow
	CBrush brShadow(GetSysColor(COLOR_3DSHADOW));
	CBrush brHilite(GetSysColor(COLOR_3DHIGHLIGHT));
	CBrush* pOldBrush = pDC->SelectObject(bShadow ? &brShadow : &brHilite);
	pDC->BitBlt(rect.left+1, rect.top+1, cx, cy, &memdc, 0, 0, MAGICROP);
	pDC->SelectObject(&brShadow);
	pDC->BitBlt(rect.left, rect.top, cx, cy, &memdc, 0, 0, MAGICROP);
	pDC->SelectObject(pOldBrush);
	pDC->SetBkColor(colorOldBG);				 // restore
	memdc.SelectObject(pOldBitmap);		 // ...
	bm.DeleteObject();
	brShadow.DeleteObject();
	brHilite.DeleteObject();

}

//////////////////
// Shorthand to fill a rectangle with a solid color.
//
void CMenuXP::FillRect(CDC *pDC, const CRect& rc, COLORREF color)
{
	CBrush brush(color);
	CBrush* pOldBrush = pDC->SelectObject(&brush);
	pDC->PatBlt(rc.left, rc.top, rc.Width(), rc.Height(), PATCOPY);
	pDC->SelectObject(pOldBrush);
	brush.DeleteObject();
}


HBITMAP CMenuXP::CreateGradientBMP(HDC hDC,COLORREF cl1,COLORREF cl2,int nWidth,int nHeight,int nDir,int nNumColors)
{
	if(nNumColors > 256)
		nNumColors = 256;

	COLORREF		PalVal[256];
	memset(PalVal, 0, sizeof(COLORREF)*256);

	int nIndex;
	BYTE peRed=0,peGreen=0,peBlue=0;

	int r1=GetRValue(cl1);
	int r2=GetRValue(cl2);
	int g1=GetGValue(cl1);
	int g2=GetGValue(cl2);
	int b1=GetBValue(cl1);
	int b2=GetBValue(cl2);

    for (nIndex = 0; nIndex < nNumColors; nIndex++)
    {
        peRed = (BYTE) (r1 + MulDiv((r2-r1),nIndex,nNumColors-1));
        peGreen = (BYTE) (g1 + MulDiv((g2-g1),nIndex,nNumColors-1));
        peBlue = (BYTE) (b1 + MulDiv((b2-b1),nIndex,nNumColors-1));

		PalVal[nIndex]=(peRed << 16) | (peGreen << 8) | (peBlue);
	}

	int x,y,w,h;
	w=nWidth;
	h=nHeight;
	
	LPDWORD			pGradBits;
	BITMAPINFO		GradBitInfo;

	pGradBits=(DWORD*) malloc(w*h*sizeof(DWORD));
	memset(&GradBitInfo,0,sizeof(BITMAPINFO));

	GradBitInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
	GradBitInfo.bmiHeader.biWidth=w;
	GradBitInfo.bmiHeader.biHeight=h;
	GradBitInfo.bmiHeader.biPlanes=1;
	GradBitInfo.bmiHeader.biBitCount=32;
	GradBitInfo.bmiHeader.biCompression=BI_RGB;
	
	if(nDir==0) 
	{
		for(y=0;y<h;y++) 
		{
			for(x=0;x<w;x++) 
			{
				*(pGradBits+(y*w)+x)=PalVal[MulDiv(nNumColors,y,h)];
			}
		}
	}
	else if(nDir==1) 
	{
		for(y=0;y<h;y++)
		{
			int l,r;
			l=MulDiv((nNumColors/2),y,h);
			r=l+(nNumColors/2)-1;
			for(x=0;x<w;x++)
			{
				*(pGradBits+(y*w)+x)=PalVal[l+MulDiv((r-l),x,w)];
			}
		}
	}
	else if(nDir==2)
	{
		for(x=0;x<w;x++)
		{
			for(y=0;y<h;y++)
			{
				*(pGradBits+(y*w)+x)=PalVal[MulDiv(nNumColors,x,w)];
			}
		}
	}
	else if(nDir==3)
	{
		for(y=0;y<h;y++)
		{
			int l,r;
			r=MulDiv((nNumColors/2),y,h);
			l=r+(nNumColors/2)-1;
			for(x=0;x<w;x++)
			{
				*(pGradBits+(y*w)+x)=PalVal[l+MulDiv((r-l),x,w)];
			}
		}
	}

	HBITMAP hBmp = CreateDIBitmap(hDC,&GradBitInfo.bmiHeader,CBM_INIT,
						pGradBits,&GradBitInfo,DIB_RGB_COLORS);

	free(pGradBits);

	return hBmp;
}

//static member for keyboard operation, you can used it in you parent window
//it work with shortcut key
LRESULT CMenuXP::OnMenuChar(UINT nChar, UINT nFlags, CMenu* pMenu) 
{
	UINT iCurrentItem = (UINT)-1; // guaranteed higher than any command ID
	CUIntArray arItemsMatched;		// items that match the character typed

	UINT nItem = pMenu->GetMenuItemCount();
	for (UINT i=0; i< nItem; i++) 
	{
		MENUITEMINFO	info;
		memset(&info, 0, sizeof(info));
		info.cbSize = sizeof(info);
		info.fMask = MIIM_DATA | MIIM_TYPE | MIIM_STATE;
		::GetMenuItemInfo(*pMenu, i, TRUE, &info);

		CMenuXPItem	*pData = (CMenuXPItem *)info.dwItemData;
		if ((info.fType & MFT_OWNERDRAW) && pData && pData->IsMyData())
		{
			CString	text = pData->m_strText;
			int iAmpersand = text.Find('&');
			if (iAmpersand >=0 && toupper(nChar)==toupper(text[iAmpersand+1]))
				arItemsMatched.Add(i);
		}
		if (info.fState & MFS_HILITE)
			iCurrentItem = i; // note index of current item
	}
	

	// arItemsMatched now contains indexes of items that match the char typed.
	//
	//   * if none: beep
	//   * if one:  execute it
	//   * if more than one: hilite next
	//
	UINT nFound = arItemsMatched.GetSize();
	if (nFound == 0)
		return 0;

	else if (nFound==1)
		return MAKELONG(arItemsMatched[0], MNC_EXECUTE);

	// more than one found--return 1st one past current selected item;
	UINT iSelect = 0;
	for (i=0; i < nFound; i++) {
		if (arItemsMatched[i] > iCurrentItem) {
			iSelect = i;
			break;
		}
	}
	return MAKELONG(arItemsMatched[iSelect], MNC_SELECT);
}

void CMenuXP::DrawMenuText(CDC& dc, CRect rc, CString text,
	COLORREF color)
{
	CString left = text;
	CString right;
	int iTabPos = left.Find('\t');
	if (iTabPos >= 0) {
		right = left.Right(left.GetLength() - iTabPos - 1);
		left  = left.Left(iTabPos);
	}
	dc.SetTextColor(color);
	dc.DrawText(left, &rc, DT_MYSTANDARD);
	if (iTabPos > 0)
		dc.DrawText(right, &rc, DT_MYSTANDARD|DT_RIGHT);
}

//find a popupmenu from a menuitem id
CMenuXP *CMenuXP::FindSubMenuFromID(DWORD dwID)
{
	CMenuXP	*pSubMenu;
	CMenuXP	*pResult;
	for (UINT i=0; i<GetMenuItemCount(); i++)
	{
		if (GetMenuItemID(i) == dwID)
				return this;
	}

	for (i=0; i<GetMenuItemCount(); i++)
	{
		pSubMenu = (CMenuXP *)GetSubMenu(i);
		if (pSubMenu)
		{
			pResult = pSubMenu->FindSubMenuFromID(dwID);
			if (pResult)
				return pResult;
		}
	}

	return NULL;
}

//Add a gradient sidebar, it must be the first item in a popupmenu
BOOL CMenuXP::AddSideBar(CMenuXPSideBar *pItem)
{
	ASSERT(pItem);

	m_bBreak = TRUE;
	m_bBreakBar = FALSE;

	return AppendMenu(MF_OWNERDRAW | MF_SEPARATOR, pItem->m_dwID, (LPCTSTR)pItem);
}

//add a normal menuitem, an accelerator key could be specified, and the accel text will
//be added automatically
BOOL CMenuXP::AppendODMenu(UINT nFlags, CMenuXPItem *pItem, ACCEL *pAccel)
{
	ASSERT(pItem);

	nFlags |= MF_OWNERDRAW;
	if (m_bBreak) 
		nFlags |= MF_MENUBREAK;
	if (m_bBreakBar)
		nFlags |= MF_MENUBARBREAK;
	m_bBreak = m_bBreakBar = FALSE;

	if (pAccel)
	{
		CBCGKeyHelper	keyhelper(pAccel);
		CString	strAccel;
		keyhelper.Format(strAccel);
		if (strAccel.GetLength()>0)
		{
			pItem->m_strText += _T("\t");
			pItem->m_strText += strAccel;
		}
	}

	return AppendMenu(nFlags, pItem->m_dwID, (LPCTSTR)pItem);
}

//Add a separator line
BOOL CMenuXP::AppendSeparator(void)	
{
	m_bBreak = m_bBreakBar = FALSE;

	CMenuXPSeparator *pItem = new CMenuXPSeparator;

	return AppendMenu(MF_OWNERDRAW | MF_SEPARATOR, 0, (LPCTSTR)pItem);
}

//add a popup menu
BOOL CMenuXP::AppendODPopup(UINT nFlags, CMenuXP *pPopup, CMenuXPItem *pItem)
{
	ASSERT(pPopup);
	ASSERT(pItem);

	nFlags |= MF_OWNERDRAW;
	nFlags |= MF_POPUP;
	if (m_bBreak) 
		nFlags |= MF_MENUBREAK;
	if (m_bBreakBar)
		nFlags |= MF_MENUBARBREAK;
	m_bBreak = m_bBreakBar = FALSE;

	return AppendMenu(nFlags, (UINT)pPopup->m_hMenu, (LPCTSTR)pItem);
}

//Change column, the next item added will be in the next column
void CMenuXP::Break(void)
{
	m_bBreak = TRUE;
}

//same as Break(), except that a break line will appear between the two columns
void CMenuXP::BreakBar(void)	
{
	m_bBreakBar = TRUE;
}

//Set background bitmap, null to remove
void CMenuXP::SetBackBitmap(HBITMAP hBmp)
{
	if (hBmp == NULL && m_hBitmap)
	{
		::DeleteObject(m_hBitmap);
		m_hBitmap = NULL;
		m_memDC.DeleteDC();
		return;
	}
	m_hBitmap = hBmp;
	if (!m_memDC.m_hDC)
	{
		CWindowDC	dc(NULL);
		m_memDC.CreateCompatibleDC(&dc);
	}

	ASSERT(m_memDC.m_hDC);

	::SelectObject(m_memDC.m_hDC, m_hBitmap);

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美www视频| www国产精品av| 国产69精品久久久久毛片| 亚洲午夜免费电影| 久久久www成人免费毛片麻豆 | 欧美日韩国产一区二区三区地区| 六月丁香婷婷久久| 国产精品一区二区在线看| 亚洲一区视频在线观看视频| 国产日韩欧美精品综合| 91精品国产aⅴ一区二区| 日本黄色一区二区| 成人性视频免费网站| 久久精品国产精品青草| 香蕉成人啪国产精品视频综合网 | caoporen国产精品视频| 激情深爱一区二区| 日韩黄色免费电影| 亚洲第一在线综合网站| 亚洲九九爱视频| 国产精品看片你懂得| 国产欧美一区二区精品秋霞影院| 日韩欧美成人一区二区| 日韩午夜av电影| 欧美精品乱码久久久久久| 色一区在线观看| 91免费观看视频| 波多野结衣中文一区| 福利一区二区在线观看| 韩国精品免费视频| 国产毛片精品一区| 国产一区91精品张津瑜| 国产真实精品久久二三区| 久久99深爱久久99精品| 蜜臀va亚洲va欧美va天堂| 天堂久久久久va久久久久| 丝袜美腿亚洲综合| 精品一区二区在线视频| 久久国产精品99久久久久久老狼| 毛片av一区二区| 精品亚洲成a人在线观看| 黄色成人免费在线| 国产999精品久久久久久绿帽| 国产成人一级电影| 97久久超碰国产精品| 色婷婷久久综合| 欧美私模裸体表演在线观看| 欧美日本国产视频| 精品国产免费一区二区三区香蕉| 精品sm捆绑视频| 国产人成一区二区三区影院| 国产精品人人做人人爽人人添| 国产精品国产精品国产专区不片| 1区2区3区精品视频| 亚洲精品欧美激情| 日韩国产在线一| 激情欧美一区二区| aaa欧美色吧激情视频| 色94色欧美sute亚洲13| 欧美一区二区美女| 久久九九久精品国产免费直播| 亚洲欧洲韩国日本视频| 亚洲一区电影777| 免费看欧美女人艹b| 成人午夜视频网站| 欧美三级欧美一级| 久久中文娱乐网| 日韩一区中文字幕| 日韩中文字幕不卡| 成人免费电影视频| 555夜色666亚洲国产免| 国产亚洲欧美激情| 一区二区三区免费| 激情欧美日韩一区二区| 色综合天天综合狠狠| 日韩一区二区影院| 中文字幕免费在线观看视频一区| 一区av在线播放| 国产精品一区在线观看你懂的| 色婷婷国产精品久久包臀| 欧美成人三级在线| 一区二区视频在线看| 久久精品噜噜噜成人av农村| av成人免费在线观看| 日韩视频一区二区三区| 亚洲精品美国一| 国产激情视频一区二区三区欧美| 在线精品观看国产| 国产欧美日韩在线看| 天堂在线亚洲视频| 91麻豆swag| 久久久精品免费网站| 日本久久一区二区三区| 久久影音资源网| 亚洲午夜激情av| 成人午夜视频福利| 欧美sm极限捆绑bd| 亚洲成人av中文| caoporm超碰国产精品| 精品福利av导航| 日韩不卡一区二区| 欧美在线一二三四区| 国产精品欧美久久久久一区二区| 五月天婷婷综合| 色综合久久中文字幕综合网| 久久亚洲精品小早川怜子| 天堂午夜影视日韩欧美一区二区| 97精品久久久午夜一区二区三区| 亚洲精品一区二区三区香蕉| 婷婷丁香激情综合| 色哦色哦哦色天天综合| 国产欧美日韩激情| 国内外成人在线| 欧美大度的电影原声| 视频一区视频二区在线观看| 在线免费观看日本欧美| 国产精品传媒入口麻豆| 国产91精品免费| 久久久久久一二三区| 欧美aaa在线| 欧美二区在线观看| 午夜精品爽啪视频| 欧美日韩一级片在线观看| 亚洲精品视频免费观看| 色哟哟精品一区| 一区二区三区免费在线观看| 色吊一区二区三区| 亚洲一区二区欧美| 欧美私人免费视频| 天天操天天色综合| 777久久久精品| 免费三级欧美电影| 欧美不卡一区二区三区| 蜜桃视频在线观看一区二区| 日韩一区二区三区观看| 美女视频黄久久| 久久综合国产精品| 成人午夜av影视| 亚洲婷婷国产精品电影人久久| a亚洲天堂av| 国产精品少妇自拍| 国产日韩精品一区二区三区| 高清在线成人网| 日本一区二区成人在线| 99久久精品国产网站| 亚洲精品国久久99热| 在线观看91精品国产入口| 天堂va蜜桃一区二区三区漫画版| 欧美一区二区三区免费在线看| 日本aⅴ免费视频一区二区三区| 日韩一区二区中文字幕| 精品一区二区久久| 中文字幕乱码久久午夜不卡| 色琪琪一区二区三区亚洲区| 亚洲va中文字幕| 精品剧情在线观看| 国产不卡在线播放| 亚洲一区中文日韩| 欧美一区二区三区在线观看| 精品一区二区三区香蕉蜜桃| 欧美激情一区在线| 欧美在线free| 久久精品久久综合| 综合久久久久久久| 91麻豆精品国产无毒不卡在线观看 | 国产精品欧美久久久久无广告 | 国产亚洲欧洲997久久综合| 一本到三区不卡视频| 亚洲第一电影网| 精品捆绑美女sm三区| 91美女在线观看| 男女视频一区二区| 国产精品美女久久久久久久久久久| 欧美在线啊v一区| 国产精品一二三| 亚洲国产精品久久久男人的天堂 | 欧美日韩免费电影| 国产精品亚洲人在线观看| 一区二区久久久久久| 精品国产乱码久久久久久蜜臀| av中文字幕不卡| 日本va欧美va瓶| 亚洲人成网站色在线观看| 欧美一区二区三区在| 97精品视频在线观看自产线路二| 蜜臀国产一区二区三区在线播放 | 亚洲永久免费视频| 精品少妇一区二区三区视频免付费 | 欧美一区二区三区公司| 成人av网站在线观看免费| 亚洲综合免费观看高清完整版| 日韩欧美aaaaaa| 欧美最新大片在线看| 国产福利一区二区三区在线视频| 亚洲一区自拍偷拍| 亚洲欧洲精品一区二区三区| 久久亚洲私人国产精品va媚药| 欧美午夜免费电影| 91色在线porny| 国产高清久久久|