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

📄 xpmenu.cpp

📁 ado操作数据库。oracle,sql2000只需更换连接字符串即可。 另外说明 我是原创作者。 欢迎大家和我交流 msn:hans_38@163.net
💻 CPP
字号:
// XPMenu.cpp: implementation of the CXPMenu class.
/***********************************************************
		Written by : FanWenSheng
		Address    : HeFei University of Technology
		Email      : fanwenshengcom@sohu.com
		Copyright (c) 2002.9.25 
***********************************************************/

//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "XPMenu.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

#ifndef GRAY_AREA_LENGTH
#define GRAY_AREA_LENGTH 0x00000019
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CXPMenu::CXPMenu()
{}

CXPMenu::~CXPMenu()
{}

// draw the menu with XP styles
void CXPMenu::DrawItem (LPDRAWITEMSTRUCT lpDIS)
{
	// get dc
	CDC* pDC = CDC::FromHandle(lpDIS->hDC);
	VERIFY(pDC);
	pDC->SetBkMode(TRANSPARENT);

	// get position
	CRect rcItem = lpDIS->rcItem;

	// get states
	UINT uState = lpDIS->itemState;

	// the data of menu item is NULL then return
	if(lpDIS->itemData == NULL)
		return;

	// get item informations
	UINT uIdNormal      = ((CItemInfo*)(lpDIS->itemData))->uIdNormal;
	UINT uIdSelect      = ((CItemInfo*)(lpDIS->itemData))->uIdSelect;
	CString sText       = ((CItemInfo*)(lpDIS->itemData))->sText;

	// get icon position and text position
	CRect rcIcon(rcItem);
	rcIcon.right = rcIcon.left + GRAY_AREA_LENGTH;
	CRect rcText(rcItem);
	rcText.left  = rcIcon.right;

	// draw background and icon
	if(uState & ODS_SELECTED)
	{
		DrawBgClr(pDC, rcItem, TRUE);
		DrawIcon(pDC, rcIcon, uIdNormal, uIdSelect, TRUE);
	}
	else
	{
		DrawBgClr(pDC, rcItem, FALSE);
		DrawIcon(pDC, rcIcon, uIdNormal, uIdSelect, FALSE);
	}

	// draw text
	DrawText(pDC, rcText, sText);
}

// draw background color
void CXPMenu::DrawBgClr(CDC* pDC, CRect rect, BOOL bSelected)
{
	if(bSelected)
	{
		// draw frame
		pDC->SelectStockObject(NULL_BRUSH);
		pDC->SelectStockObject(BLACK_PEN);
		pDC->Rectangle(&rect);
		
		// fill background with XP color
		rect.DeflateRect(0x00000001, 0x00000001);
		pDC->FillSolidRect(&rect, RGB(0x000000B1, 0x000000B9, 0x000000CF));
	}
	else
	{
		CRect rcGray(rect);
		rcGray.right = rcGray.left + GRAY_AREA_LENGTH;
		pDC->FillSolidRect(&rcGray, RGB(0x000000DB, 0x000000D8, 0x000000D1));

		CRect rcWhite(rect);
		rcWhite.left = rcGray.right;
		pDC->FillSolidRect(&rcWhite, RGB(0x000000F9, 0x000000F8, 0x000000F7));
	}
}

// draw everyone icon for menu items
void CXPMenu::DrawIcon(CDC* pDC, CRect rect, UINT uIdNormal, UINT uIdSelect, BOOL bSelected)
{
	rect.DeflateRect(0x03, 0x03, 0x03, 0x03);

	if(bSelected)
	{
		HICON hIcon = AfxGetApp()->LoadIcon(uIdSelect);
		ASSERT(hIcon);
		rect.OffsetRect(-1, -1);
		::DrawIconEx(pDC->m_hDC, rect.left, rect.top, 
			hIcon, 16, 16, 0, NULL, DI_NORMAL);
	}
	else
	{
		HICON hIcon = AfxGetApp()->LoadIcon(uIdNormal);
		ASSERT(hIcon);
		::DrawIconEx(pDC->m_hDC, rect.left, rect.top, 
			hIcon, 16, 16, 0, NULL, DI_NORMAL);
	}
}

// draw everyone text for menu items
void CXPMenu::DrawText(CDC* pDC, CRect rect, CString sText)
{
	rect.DeflateRect(0x08, 0x00, 0x00, 0x00);
	pDC->DrawText(sText, &rect, DT_LEFT | DT_VCENTER | DT_SINGLELINE);
}

void CXPMenu::MeasureItem(LPMEASUREITEMSTRUCT lpMIS)
{
	lpMIS->itemWidth = 130;
	lpMIS->itemHeight = 22;
}

⌨️ 快捷键说明

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