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

📄 mymenu1.cpp

📁 这是一个打字游戏哦
💻 CPP
字号:
// MyMenu1.cpp: implementation of the CMyMenu class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "打字游戏.h"
#include "MyMenu1.h"

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

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

CMyMenu::CMyMenu()
{
	m_nCount = 0 ;
	m_nMaxWidth = 0;
	m_array.RemoveAll();
	m_bFirst =TRUE;

}

CMyMenu::~CMyMenu()
{
	if(m_bitmap.m_hObject != NULL)
		m_bitmap.DeleteObject();
	m_array.RemoveAll();
	
}
BOOL CMyMenu::CreateMenu(UINT nIDBitmap)
{
	if(!CMenu::CreatePopupMenu())
		return FALSE;
	if( nIDBitmap != 0 )
	{
		m_bitmap.LoadBitmap(nIDBitmap);
	}
	
	SetColor();
	return TRUE;

}


void CMyMenu::SetColor(COLORREF clrText ,COLORREF clrBackGround ,COLORREF clrHighLight )
{
	ASSERT(m_hMenu != NULL);
	m_clrText = clrText;
	m_clrBackGround = clrBackGround;
	m_clrHighLight = clrHighLight;
}
BOOL CMyMenu::InsertMenu(UINT nID,LPCTSTR pszText,UINT nIconID)
{
	ASSERT(m_hMenu != NULL);
	MENUICONSTRUCT MenuIcon;
	lstrcpy(MenuIcon.pszMenuCaption,pszText);
	if(lstrlen(pszText) > m_nMaxWidth )
	{
		m_nMaxWidth = lstrlen(pszText);
	}
	if(nIconID != 0)
	{
		MenuIcon.hIcon = ::LoadIcon(AfxGetInstanceHandle(),(LPCTSTR)nIconID);
	}
	else
	{
		MenuIcon.hIcon = NULL;
	}
	m_nCount++;
	if(m_bitmap.m_hObject != NULL)
	{
		BITMAP bmp;
		m_bitmap.GetObject(sizeof(BITMAP),&bmp);
		MenuIcon.rect.left=0;
		MenuIcon.rect.right=bmp.bmWidth;
		MenuIcon.rect.top=max(2,bmp.bmHeight-m_nCount*32);//32 is icon width and height
		MenuIcon.rect.bottom=MenuIcon.rect.top+32;
	}
	MenuIcon.uID=nID;
	m_array.Add(MenuIcon);
	if(!CMenu::AppendMenu(	MF_OWNERDRAW|MF_BYCOMMAND|MF_STRING,
							nID,
							(LPCTSTR)NULL))
		return FALSE;
	return TRUE;
	
}
void CMyMenu::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
	
	ASSERT(m_hMenu != NULL);
	int i;
	
	if(m_bFirst)
	{
		m_bFirst = FALSE;
		InfoArray tempArray;
		for(i=m_array.GetSize()-1;i>=0;i--)
		{
			tempArray.Add(m_array[i]);
		}
		for(i=0;i<tempArray.GetSize();i++)
		{
			m_array[i].rect=tempArray[i].rect;
		}

	}
	CBrush brushHighLight(m_clrHighLight);
	CBrush brushBackGround(m_clrBackGround);
	
	CRect rect;
	CDC dc;
	CDC dcMem;
	CBitmap *pOldBitmap;
	CRect rt;
	dc.Attach(lpDrawItemStruct->hDC);
	
	int nTabs[3]={50,100,150};
	for(i=0;i<m_array.GetSize();i++)
	{
		if(m_array.GetAt(i).uID ==lpDrawItemStruct->itemID)
		{
			MENUICONSTRUCT MenuIcon=m_array.GetAt(i);
			if(m_bitmap.m_hObject != NULL)
			{
				
				dcMem.CreateCompatibleDC(&dc);
				pOldBitmap = (CBitmap *)dcMem.SelectObject(&m_bitmap);
				dc.BitBlt(	lpDrawItemStruct->rcItem.left,lpDrawItemStruct->rcItem.top,
					MenuIcon.rect.right,32,
					&dcMem,
					MenuIcon.rect.left,
					MenuIcon.rect.top,
					SRCCOPY);
				
				dcMem.SelectObject(pOldBitmap);
				
				rect= lpDrawItemStruct->rcItem;
				rect.left+=32;
				
				if( (lpDrawItemStruct->itemState & ODS_SELECTED))
				{
					dc.FillRect(&rect,&brushHighLight);
				}
				else
				{
					dc.FillRect(&rect,&brushBackGround);
				}
				if(MenuIcon.hIcon!=NULL)
				{
					dc.DrawIcon(rect.left,rect.top,MenuIcon.hIcon);
					rt = rect;
					rt.right = rt.left +32;
					if((lpDrawItemStruct->itemState & ODS_SELECTED))
						dc.DrawEdge(&rt,EDGE_RAISED,BF_RECT);
				}
				rect.left += 38;
				dc.SetBkMode(TRANSPARENT);
				if((lpDrawItemStruct->itemState & ODS_SELECTED))
					dc.SetTextColor(RGB(~GetRValue(m_clrHighLight),~GetGValue(m_clrHighLight),~GetBValue(m_clrHighLight)));
				else
					dc.SetTextColor(m_clrText);
				
				dc.DrawText(MenuIcon.pszMenuCaption,&rect,DT_EXPANDTABS|DT_SINGLELINE|DT_VCENTER|DT_VCENTER);
			}
			else
			{
				rect = lpDrawItemStruct->rcItem;
				if((lpDrawItemStruct->itemState & ODS_SELECTED))
				{
					dc.FillRect(&rect,&brushHighLight);
				}
				else
				{
					dc.FillRect(&rect,&brushBackGround);
				}
				if(MenuIcon.hIcon!=NULL)
				{
					dc.DrawIcon(rect.left,rect.top,MenuIcon.hIcon);
					rt = rect;
					rt.right = rt.left +32;
					if((lpDrawItemStruct->itemState & ODS_SELECTED))
						dc.DrawEdge(&rt,EDGE_RAISED,BF_RECT);
				}
				rect.left += 38;
					if((lpDrawItemStruct->itemState & ODS_SELECTED))
					dc.SetTextColor(~m_clrBackGround);
				else
					dc.SetTextColor(m_clrText);
				dc.DrawText(MenuIcon.pszMenuCaption,&MenuIcon.rect,DT_TABSTOP|DT_SINGLELINE|DT_VCENTER|DT_VCENTER);
			}
			break;
		}
		
	}
	
	dc.Detach();
}
void CMyMenu::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
	lpMeasureItemStruct->itemHeight=32;
	lpMeasureItemStruct->itemWidth =260;
}

⌨️ 快捷键说明

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