📄 skinmenu.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 + -