⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skinmenu.cpp

📁 If you are not using these features and wish to reduce the size
💻 CPP
字号:
// SkinMenu.cpp : implementation file
//

#include "stdafx.h"
#include "dialog.h"
#include "SkinMenu.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
 
/////////////////////////////////////////////////////////////////////////////
// CSkinMenu
IMPLEMENT_DYNCREATE(CSkinMenu, CMenu)
CSkinMenu::CSkinMenu()
{
	//VERIFY(CreateMenu());
}

CSkinMenu::~CSkinMenu()
{
	Detach();
	ASSERT(m_hMenu == NULL);    // defaul CMenu::~CMenu will destroy
}



/////////////////////////////////////////////////////////////////////////////
// CSkinMenu message handlers
void CSkinMenu::DrawItem( LPDRAWITEMSTRUCT lpDIS)
{
	CDC	*pDC=CDC::FromHandle(lpDIS->hDC) ;
	CRect rect(lpDIS->rcItem);
	CString	strText((LPCSTR)lpDIS->itemData);


	//设定背景色
	CBrush brush(m_crFlatBK);
	pDC->FillRect(&rect, &brush);

	CRect rcGray=rect;
	rcGray.right =rcGray.left +28;
	pDC->FillSolidRect(&rcGray, m_crFlatGray);
	//设定显示模式
	pDC->SetBkMode(TRANSPARENT);
	CBrush br(m_crBtnShadow);
	//选中
	if ((lpDIS->itemState & ODS_SELECTED) &&
	  (lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
	{
		CBrush brush(m_crFlatHighLight);
		rect.DeflateRect(1,1) ;
		pDC->FrameRect(&rect, &br);
		rect.DeflateRect(1,1) ;
		pDC->FillRect(&rect, &brush);
	}
	BOOL	bChecked  =lpDIS->itemState & ODS_CHECKED;
	BOOL    bSelected=lpDIS->itemState & ODS_SELECTED;
	if (bChecked)
	{
		COLORREF cr;
		if (bSelected)
			cr=AlphaColor(m_crFlatHighLight,AlphaColor(m_crFlatHighLight,m_crFlatBK,140),140);
		else
			cr=AlphaColor(m_crFlatHighLight,m_crFlatBK,140);
		rcGray.DeflateRect(3,3); 
		pDC->SetBkMode(TRANSPARENT);
		pDC->SetTextColor(RGB(0,0,0));
		pDC->FrameRect(&rcGray, &br);
		rcGray.DeflateRect(1,1); 
		pDC->FillSolidRect(&rcGray, cr);
		pDC->DrawText("√",&rcGray,DT_EXPANDTABS|DT_VCENTER|DT_CENTER|DT_SINGLELINE);
	}
 	
	//文字
	if(bSelected)
		pDC->SetTextColor(m_crFlatHighLightText);
	else
		pDC->SetTextColor(RGB(0,0,0));  
	CRect rcText=rect;
	rcText.left =28+3;
	CFont *ofont;
	ofont = pDC->SelectObject(AfxGetMainWnd()->GetFont() );

	pDC->DrawText(strText,rcText,DT_LEFT|DT_SINGLELINE|DT_VCENTER);
	pDC->SelectObject(ofont);
}

void CSkinMenu::MeasureItem(LPMEASUREITEMSTRUCT lpMIS)
{
	CDC	 *pDC =AfxGetMainWnd()->GetDC();
	CString	strText((LPCSTR)lpMIS->itemData);
	CSize  size;
	size=pDC->GetTextExtent(strText);
	lpMIS->itemWidth = size.cx +24+4;	
	lpMIS->itemHeight =24+4;
	AfxGetMainWnd()->ReleaseDC(pDC);
}

//透明效果
COLORREF CSkinMenu::AlphaColor(COLORREF crUp,COLORREF crDown,int nAlpha)
{
	//Alpha通道,Alpha取值范围从0到255
	return RGB((GetRValue(crUp)*(255-nAlpha)+GetRValue(crDown)*nAlpha)/255, \
	(GetGValue(crUp)*(255-nAlpha)+GetGValue(crDown)*nAlpha)/255,\
	(GetBValue(crUp)*(255-nAlpha)+GetBValue(crDown)*nAlpha)/255); 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -