Example #1
0
//绘画背景
BOOL CLayeredDialog::OnEraseBkgnd(CDC * pDC)
{
	//获取位置
	CRect rcClient;
	GetClientRect(&rcClient);

	//建立缓冲
	CImage ImageBuffer;
	ImageBuffer.Create(rcClient.Width(),rcClient.Height(),32);

	if ( ImageBuffer.IsNull() ) return TRUE;

	//创建 DC
	CImageDC BufferDC(ImageBuffer);
	CDC * pBufferDC=CDC::FromHandle(BufferDC);

	//设置缓冲
	pBufferDC->SetBkMode(TRANSPARENT);

	//绘画背景
	m_ImageBack.DrawImage(pBufferDC,0,0);

	OnDrawClientArea(pBufferDC,rcClient.Width(),rcClient.Height());

	//绘画界面
	pDC->BitBlt(0,0,rcClient.Width(),rcClient.Height(),pBufferDC,0,0,SRCCOPY);

	return TRUE;
}
//绘画背景
BOOL CDlgEnquire::OnEraseBkgnd(CDC * pDC)
{
	//获取位置
	CRect rcClient;
	GetClientRect(&rcClient);

	//建立缓冲
	CImage ImageBuffer;
	ImageBuffer.Create(rcClient.Width(),rcClient.Height(),32);

	//创建 DC
	CImageDC BufferDC(ImageBuffer);
	CDC * pBufferDC=CDC::FromHandle(BufferDC);

	//设置缓冲
	pBufferDC->SetBkMode(TRANSPARENT);
	pBufferDC->SelectObject(CSkinResourceManager::GetInstance()->GetDefaultFont());

	//加载资源
	CPngImage ImageBack;
	ImageBack.LoadImage(AfxGetInstanceHandle(),TEXT("DLG_ENQUIRE_BACK"));

	//绘画背景
	ImageBack.DrawImage(pBufferDC,0,0);

	//绘画界面
	pDC->BitBlt(0,0,rcClient.Width(),rcClient.Height(),pBufferDC,0,0,SRCCOPY);

	return TRUE;
}
Example #3
0
//确定函数
VOID CDlgCustomFace::OnOK()
{
	//连接判断
	bool bConnect=false;

	//系统模式
	if (m_cbMode==MM_SYSTEM)
	{
		CGlobalUserInfo * pGlobalUserInfo=CGlobalUserInfo::GetInstance();
		bConnect=(pGlobalUserInfo->GetGlobalUserData()->wFaceID!=m_wFaceID);
	}

	//自定模式
	if (m_cbMode==MM_CUSTOM)
	{
		//创建缓冲
		CImage ImageCustomFace;
		ImageCustomFace.Create(FACE_CX,FACE_CY,32);

		//创建 DC
		CImageDC BufferDC(ImageCustomFace);
		m_FaceItemCustomWnd.DrawEditImage(CDC::FromHandle(BufferDC),0,0,FACE_CX,FACE_CY);

		//获取数据
		INT nImagePitch=ImageCustomFace.GetPitch();
		LPBYTE cbBitCustomFace=(LPBYTE)ImageCustomFace.GetBits();

		//创建区域
		for (INT nYImagePos=0;nYImagePos<FACE_CY;nYImagePos++)
		{
			for (INT nXImagePos=0;nXImagePos<FACE_CX;nXImagePos++)
			{
				//设置颜色
				DWORD dwImageTarget=nYImagePos*nImagePitch+nXImagePos*4L;
				m_CustomFaceInfo.dwCustomFace[nYImagePos*FACE_CX+nXImagePos]=*(COLORREF *)(cbBitCustomFace+dwImageTarget);
			}
		}

		//设置变量
		bConnect=true;
		m_CustomFaceInfo.dwDataSize=sizeof(m_CustomFaceInfo);
	}

	//激活任务
	if (bConnect==true)
	{
		//控件控制
		EnableControl(false);

		//激活任务
		m_MissionManager.AvtiveMissionItem(this,false);

		return;
	}

	__super::OnOK();
}
Example #4
0
//重画消息
VOID CCollocateBar::OnPaint()
{
	CPaintDC dc(this);

	//获取位置
	CRect rcClient;
	GetClientRect(&rcClient);

	//创建缓冲
	CBitImage ImageBuffer;
	ImageBuffer.Create(rcClient.Width(),rcClient.Height(),32);

	//创建设备
	CImageDC BufferDC(ImageBuffer);
	CDC * pBufferDC=CDC::FromHandle(BufferDC);

	//设置设备
	pBufferDC->SetBkMode(TRANSPARENT);
	pBufferDC->SelectObject(CSkinResourceManager::GetInstance()->GetDefaultFont());

	//加载资源
	CPngImage ImageButton;
	CPngImage ImageBarLogo;
	ImageButton.LoadImage(AfxGetInstanceHandle(),TEXT("COLLOCATE_BAR_BT"));
	ImageBarLogo.LoadImage(AfxGetInstanceHandle(),TEXT("COLLOCATE_BAR_LOGO"));

	//绘画背景
	pBufferDC->FillSolidRect(&rcClient,RGB(223,236,246));
	ImageBarLogo.DrawImage(pBufferDC,rcClient.Width()-ImageBarLogo.GetWidth(),rcClient.Height()-ImageBarLogo.GetHeight());

	//绘画按钮
	for (INT i=0;i<m_CollocateItemArray.GetCount();i++)
	{
		//获取对象
		ASSERT(m_CollocateItemArray[i]!=NULL);
		CCollocateItem * pCollocateItem=m_CollocateItemArray[i];

		//变量定义
		INT nXButtomPos=0;
		INT nYButtomPos=pCollocateItem->m_cbImageIndex*m_SizeButton.cy;

		//横行计算
		if ((m_wItemHover==i)&&(m_wItemDown!=i)) nXButtomPos=m_SizeButton.cx*2;
		if ((m_wItemActive==i)||(m_wItemDown==i)) nXButtomPos=m_SizeButton.cx;

		//绘画按钮
		INT nXDrawPos=(rcClient.Width()-m_SizeButton.cx)/2;
		INT nYDrawPos=(m_SizeButton.cy+BAR_BT_SPACE)*i+BAR_BT_EXCURSION;
		ImageButton.DrawImage(pBufferDC,nXDrawPos,nYDrawPos,m_SizeButton.cx,m_SizeButton.cy,nXButtomPos,nYButtomPos);
	}

	//绘画界面
	dc.BitBlt(0,0,rcClient.Width(),rcClient.Height(),pBufferDC,0,0,SRCCOPY);

	return;
}
BOOL CEasySkinListCtrl::OnEraseBkgnd( CDC* pDC )
{
	CRect rcClient;
	GetClientRect(&rcClient);

	CMemoryDC BufferDC(pDC,&rcClient);

	BufferDC.FillSolidRect(&rcClient,m_colBack);

	return TRUE;
}
//重画函数
VOID CEasySkinHeaderCtrl::OnPaint() 
{
	CPaintDC dc(this);

	//获取位置
	CRect rcRect;
	GetClientRect(&rcRect);

	CMemoryDC BufferDC(&dc,rcRect);

	//设置 DC
	BufferDC.SetBkMode(TRANSPARENT);
	BufferDC.SetTextColor(m_colNormalText);
	BufferDC.SelectObject(GetCtrlFont());

	//绘画背景
	if (m_pBackImg != NULL && !m_pBackImg->IsNull())
		m_pBackImg->Draw(&BufferDC,rcRect);

	if (m_pPressImg != NULL && !m_pPressImg->IsNull() && m_bPress)
	{
		CRect rcItem;
		GetItemRect(m_uActiveItem,&rcItem);

		m_pPressImg->Draw(&BufferDC,rcItem);
	}

	//绘画子项
	CRect rcItem;
	HDITEM HDItem;
	TCHAR szBuffer[64];
	for (INT i=0;i<GetItemCount();i++)
	{
		//构造变量
		HDItem.mask=HDI_TEXT;
		HDItem.pszText=szBuffer;
		HDItem.cchTextMax=CountArray(szBuffer);

		//获取信息
		GetItem(i,&HDItem);
		GetItemRect(i,&rcItem);

		if (m_pGridImg != NULL && !m_pGridImg->IsNull())
			m_pGridImg->DrawImage(&BufferDC,(rcItem.right-m_pGridImg->GetWidth()),(rcItem.Height()-m_pGridImg->GetHeight())/2);
	
		//绘画标题
		rcItem.DeflateRect(3,1,3,1);
		BufferDC.DrawText(szBuffer,lstrlen(szBuffer),&rcItem,DT_END_ELLIPSIS|DT_SINGLELINE|DT_VCENTER|DT_CENTER);
	}

	return;
}
//绘画函数
VOID CEasySkinListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
	//变量定义
	CRect rcItem=lpDrawItemStruct->rcItem;
	CDC * pDC=CDC::FromHandle(lpDrawItemStruct->hDC);

	CMemoryDC BufferDC(pDC,rcItem);

	//获取属性
	INT nItemID=lpDrawItemStruct->itemID;
	INT nColumnCount=m_EasySkinHeaderCtrl.GetItemCount();

	//绘画区域
	CRect rcClipBox;
	BufferDC.GetClipBox(&rcClipBox);

	//设置环境
	BufferDC.SetBkMode(TRANSPARENT);
	BufferDC.SetTextColor(m_colNormalText);
	BufferDC.SelectObject(GetCtrlFont());
	BufferDC->FillSolidRect(&rcItem,m_colBack);

	//绘画焦点
	if (lpDrawItemStruct->itemState&ODS_SELECTED)
	{
		if (m_pSelectImg != NULL && !m_pSelectImg->IsNull())
			m_pSelectImg->Draw(&BufferDC,rcItem);
	}
	else if ( m_uActiveItem == nItemID )
	{
		if (m_pHovenImg != NULL && !m_pHovenImg->IsNull())
			m_pHovenImg->Draw(&BufferDC,rcItem);
	}

	//绘画子项
	for (INT i=0;i<nColumnCount;i++)
	{
		//获取位置
		CRect rcSubItem;
		GetSubItemRect(nItemID,i,LVIR_BOUNDS,rcSubItem);

		//绘画判断
		if (rcSubItem.left>rcClipBox.right) break;
		if (rcSubItem.right<rcClipBox.left) continue;

		//绘画数据
		DrawReportItem(&BufferDC,nItemID,rcSubItem,i);
	}
	
	return;
}
Example #8
0
void CSkinTabCtrl::OnPaint()
{
	CPaintDC dc(this);

	CRect rcClient;
	GetClientRect(&rcClient);

	CMemoryDC BufferDC(&dc, rcClient);

	DrawParentWndBg(GetSafeHwnd(),BufferDC.m_hDC);

	if (m_lpBack != NULL && !m_lpBack->IsNull())
		m_lpBack->Draw(&BufferDC, rcClient);

	for (int i = 0; i < (int)m_ItemArray.size(); i++)
	{
		DrawItem(&BufferDC, i);
	}
}
void CEasySkinTreeCtrl::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	
	//获取位置
	CRect rcClient;
	GetClientRect(&rcClient);

	CMemoryDC BufferDC(&dc,rcClient);

	//剪切位置
	CRect rcClipBox;
	BufferDC.GetClipBox(&rcClipBox);

	//绘制背景
	BufferDC.FillSolidRect(rcClient,m_colBack);
	DrawParentWndBg(GetSafeHwnd(),BufferDC->GetSafeHdc());

	DrawTreeItem(&BufferDC,rcClient,rcClipBox);
}
Example #10
0
//绘画背景
BOOL CWndUserInfoCtrl::OnEraseBkgnd(CDC * pDC)
{
	//获取位置
	CRect rcClient;
	GetClientRect(&rcClient);

	//建立缓冲
	CImage ImageBuffer;
	ImageBuffer.Create(rcClient.Width(),rcClient.Height(),32);

	//创建 DC
	CImageDC BufferDC(ImageBuffer);
	CDC * pBufferDC=CDC::FromHandle(BufferDC);

	//变量定义
	HINSTANCE hInstance=AfxGetInstanceHandle();
	CSkinRenderManager * pSkinRenderManager=CSkinRenderManager::GetInstance();

	//加载资源
	CBitImage ImageTitleL;
	CBitImage ImageTitleM;
	CBitImage ImageTitleR;
	ImageTitleL.LoadFromResource(hInstance,IDB_USER_INFO_L);
	ImageTitleM.LoadFromResource(hInstance,IDB_USER_INFO_M);
	ImageTitleR.LoadFromResource(hInstance,IDB_USER_INFO_R);

	//渲染资源
	pSkinRenderManager->RenderImage(ImageTitleL);
	pSkinRenderManager->RenderImage(ImageTitleM);
	pSkinRenderManager->RenderImage(ImageTitleR);

	//绘画背景
	ImageTitleL.BitBlt(BufferDC,0,0);

	//填充中间
	for (INT nXPos=ImageTitleL.GetWidth();nXPos<rcClient.Width();nXPos+=ImageTitleM.GetWidth())
	{
		ImageTitleM.BitBlt(BufferDC,nXPos,0);
	}

	//绘画背景
	ImageTitleR.BitBlt(BufferDC,rcClient.Width()-ImageTitleR.GetWidth(),0);

	//设置环境
	pBufferDC->SetBkMode(TRANSPARENT);
	pBufferDC->SelectObject(CSkinResourceManager::GetInstance()->GetDefaultFont());

	//用户信息
	CGlobalUserInfo * pGlobalUserInfo=CGlobalUserInfo::GetInstance();
	tagGlobalUserData * pGlobalUserData=pGlobalUserInfo->GetGlobalUserData();

	//绘画用户
	if (pGlobalUserData->dwUserID!=0L)
	{
		//绘画底框
		if ((m_bHoverUnderWrite==true)||((m_EditUnderWrite.m_hWnd!=NULL)&&(m_EditUnderWrite.IsWindowVisible()==TRUE)))
		{
			//加载资源
			CPngImage ImageUnderWriteL;
			CPngImage ImageUnderWriteM;
			CPngImage ImageUnderWriteR;
			ImageUnderWriteL.LoadImage(AfxGetInstanceHandle(),TEXT("UNDER_WRITE_L"));
			ImageUnderWriteM.LoadImage(AfxGetInstanceHandle(),TEXT("UNDER_WRITE_M"));
			ImageUnderWriteR.LoadImage(AfxGetInstanceHandle(),TEXT("UNDER_WRITE_R"));

			//绘画两边
			ImageUnderWriteL.DrawImage(pBufferDC,m_rcUnderWrite.left,m_rcUnderWrite.top);
			ImageUnderWriteR.DrawImage(pBufferDC,m_rcUnderWrite.right-ImageUnderWriteR.GetWidth(),m_rcUnderWrite.top);

			//绘画中间
			INT nXStart=m_rcUnderWrite.left+ImageUnderWriteL.GetWidth();
			INT nXTerminate=m_rcUnderWrite.right-ImageUnderWriteR.GetWidth();
			for (INT nXPos=nXStart;nXPos<nXTerminate;nXPos+=ImageUnderWriteM.GetWidth())
			{
				ImageUnderWriteM.DrawImage(pBufferDC,nXPos,m_rcUnderWrite.top,__min(nXTerminate-nXPos,ImageUnderWriteM.GetWidth()),ImageUnderWriteM.GetHeight(),0,0);
			}
		}

		//绘画边框
		if (m_bHoverFace==true)
		{
			theApp.m_FaceItemControlModule->DrawFaceItemFrame(pBufferDC,17,18,ITEM_FRAME_HOVER);
		}

		//绘画头像
		if (pGlobalUserData->CustomFaceInfo.dwDataSize!=0)
		{
			DWORD * pdwCustomFace=pGlobalUserData->CustomFaceInfo.dwCustomFace;
			theApp.m_FaceItemControlModule->DrawFaceNormal(pBufferDC,16,17,pdwCustomFace);
		}
		else
		{
			theApp.m_FaceItemControlModule->DrawFaceNormal(pBufferDC,16,17,pGlobalUserData->wFaceID);
		}

		//绘画标题
		pBufferDC->SetTextColor(RGB(0,0,0));
		pBufferDC->TextOut(88,16,TEXT("昵 称:"));
		pBufferDC->TextOut(88,36,TEXT("奖 牌:"));
		pBufferDC->TextOut(88,56,TEXT("签 名:"));

		//构造奖牌
		TCHAR szUserMedal[64]=TEXT("");
		_sntprintf(szUserMedal,CountArray(szUserMedal),TEXT("%ld"),pGlobalUserData->dwUserMedal);

		//输出奖牌
		CRect rcUserMedal;
		rcUserMedal.SetRect(130,36,rcClient.Width()-15,48);
		pBufferDC->DrawText(szUserMedal,lstrlen(szUserMedal),&rcUserMedal,DT_SINGLELINE|DT_VCENTER|DT_END_ELLIPSIS);

		//输出帐号
		CRect rcNickName;
		rcNickName.SetRect(130,16,rcClient.Width()-15,28);
		pBufferDC->DrawText(pGlobalUserData->szNickName,lstrlen(pGlobalUserData->szNickName),&rcNickName,DT_SINGLELINE|DT_VCENTER|DT_END_ELLIPSIS);

		//变量定义
		LPCTSTR pszUnderWrite=NULL;
		COLORREF crUnderWrite=RGB(0,0,0);

		//签名位置
		CRect rcUnderWrite;
		rcUnderWrite.SetRect(130,56,rcClient.Width()-15,68);

		//常规状态
		if ((m_EditUnderWrite.IsModifyStatus()==false)&&(pGlobalUserData->szUnderWrite[0]!=0))
		{
			crUnderWrite=RGB(0,0,0);
			pszUnderWrite=pGlobalUserData->szUnderWrite;
		}

		//修改状态
		if ((m_EditUnderWrite.IsModifyStatus()==true)&&(m_EditUnderWrite.m_szUnderWrite[0]!=0))
		{
			crUnderWrite=RGB(100,100,100);
			pszUnderWrite=m_EditUnderWrite.m_szUnderWrite;
		}

		//提示状态
		if (pszUnderWrite==NULL)
		{
			crUnderWrite=RGB(150,150,150);
			pszUnderWrite=TEXT("编辑个性签名");
		}

		//输出签名
		pBufferDC->SetTextColor(crUnderWrite);
		pBufferDC->DrawText(pszUnderWrite,lstrlen(pszUnderWrite),&rcUnderWrite,DT_SINGLELINE|DT_VCENTER|DT_END_ELLIPSIS);
	}

	//绘画界面
	pDC->BitBlt(0,0,rcClient.Width(),rcClient.Height(),pBufferDC,0,0,SRCCOPY);

	return TRUE;
}
Example #11
0
//绘画背景
BOOL CGameFrameMedalView::OnEraseBkgnd(CDC * pDC)
{
	//获取位置
	CRect rcClient;
	GetClientRect(&rcClient);

	//建立缓冲
	CImage ImageBuffer;
	ImageBuffer.Create(rcClient.Width(),rcClient.Height(),32);

	//创建 DC
	CImageDC BufferDC(ImageBuffer);
	CDC * pBufferDC=CDC::FromHandle(BufferDC);

	//设置缓冲
	pBufferDC->SetBkMode(TRANSPARENT);
	pBufferDC->SetTextAlign(TA_LEFT|TA_TOP);
	pBufferDC->SetTextColor(RGB(250,250,250));
	pBufferDC->SelectObject(CSkinResourceManager::GetInstance()->GetDefaultFont());

	//加载资源
	CImage ImageUserMedalL;
	CImage ImageUserMedalM;
	CImage ImageUserMedalR;
	ImageUserMedalL.LoadFromResource(GetModuleHandle(GAME_FRAME_DLL_NAME),IDB_USER_MEDAL_L);
	ImageUserMedalM.LoadFromResource(GetModuleHandle(GAME_FRAME_DLL_NAME),IDB_USER_MEDAL_M);
	ImageUserMedalR.LoadFromResource(GetModuleHandle(GAME_FRAME_DLL_NAME),IDB_USER_MEDAL_R);

	//变量定义
	INT nXStartPos=ImageUserMedalL.GetWidth();
	INT nXConcludePos=rcClient.Width()-ImageUserMedalR.GetWidth();

	//绘画框架
	ImageUserMedalL.BitBlt(BufferDC,0,0);
	ImageUserMedalR.BitBlt(BufferDC,rcClient.Width()-ImageUserMedalR.GetWidth(),0);

	//绘画中间
	for (INT nXPos=nXStartPos;nXPos<nXConcludePos;nXPos+=ImageUserMedalM.GetWidth())
	{
		INT nCXDraw=__min(ImageUserMedalM.GetWidth(),nXConcludePos-nXPos);
		ImageUserMedalM.BitBlt(BufferDC,nXPos,0,nCXDraw,ImageUserMedalM.GetHeight(),0,0);
	}

	//加载资源
	CPngImageSB ImageCount;
	CPngImageSB ImageStringL;
	CPngImageSB ImageStringR;
	ImageCount.LoadImage(GetModuleHandle(GAME_FRAME_DLL_NAME),TEXT("MEDAL_COUNT"));
	ImageStringL.LoadImage(GetModuleHandle(GAME_FRAME_DLL_NAME),TEXT("MEDAL_STRING_L"));
	ImageStringR.LoadImage(GetModuleHandle(GAME_FRAME_DLL_NAME),TEXT("MEDAL_STRING_R"));

	//获取大小
	CSize SizeCount;
	CSize SizeStringL;
	CSize SizeStringR;
	SizeCount.SetSize(ImageCount.GetWidth()/10L,ImageCount.GetHeight());
	SizeStringL.SetSize(ImageStringL.GetWidth(),ImageStringL.GetHeight());
	SizeStringR.SetSize(ImageStringR.GetWidth(),ImageStringR.GetHeight());

	//构造奖牌
	TCHAR szUserMedal[16]=TEXT("");
	_sntprintf(szUserMedal,CountArray(szUserMedal),TEXT("%ld"),m_dwUserMedal);

	//变量定义
	INT nNumCount=lstrlen(szUserMedal);
	INT nNumStart=(rcClient.Width()-nNumCount*SizeCount.cx)/2+10;

	//绘画字符
	ImageStringL.DrawImage(pBufferDC,nNumStart-SizeStringL.cx-3,4);
	ImageStringR.DrawImage(pBufferDC,nNumStart+nNumCount*SizeCount.cx+3,4);

	//绘画奖牌
	for (INT i=0;i<nNumCount;i++)
	{
		INT nXImage=(szUserMedal[i]-TEXT('0'))*SizeCount.cx;
		ImageCount.DrawImage(pBufferDC,nNumStart+i*SizeCount.cx,7,SizeCount.cx,SizeCount.cy,nXImage,0);
	}

	//绘画界面
	pDC->BitBlt(0,0,rcClient.Width(),rcClient.Height(),pBufferDC,0,0,SRCCOPY);

	return TRUE;
}
Example #12
0
//绘画函数
VOID CUIMenu::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
	//效验参数
	ASSERT(lpDrawItemStruct->CtlType==ODT_MENU);
	if (lpDrawItemStruct->CtlType!=ODT_MENU) return;

	//变量定义
	CRect rcItem=lpDrawItemStruct->rcItem;
	CDC * pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
	CEasySkinMenuItem * pEasySkinMenuItem=(CEasySkinMenuItem *)lpDrawItemStruct->itemData;

	CMemoryDC BufferDC(pDC,rcItem);

	//状态变量
	bool bChecked=((lpDrawItemStruct->itemState&ODS_CHECKED)!=0);
	bool bSelected=((lpDrawItemStruct->itemState&ODS_SELECTED)!=0);
	bool bGrayed=((lpDrawItemStruct->itemState&ODS_DISABLED)||(lpDrawItemStruct->itemState&ODS_GRAYED));

	//绘画背景
	COLORREF crMenuBar=RGB(255,255,255);
	COLORREF crBorder=RGB(213,233,242);
	COLORREF crNormalBack=RGB(255,255,255);

	//菜单左边
	if ( m_pMenuBar != NULL && m_pMenuBar->IsNull() == false )
		m_pMenuBar->Draw(&BufferDC,CRect(rcItem.left,rcItem.top,MENU_BAR_CX,rcItem.bottom));
	else
		BufferDC.FillSolidRect(rcItem.left,rcItem.top,MENU_BAR_CX,rcItem.Height(),crMenuBar);
	
	//菜单节点的背景
 	if ( m_pMenuBack != NULL && m_pMenuBack->IsNull() == false )
 		m_pMenuBack->Draw(&BufferDC,CRect(rcItem.left+MENU_BAR_CX,rcItem.top,rcItem.Width(),rcItem.bottom));
 	else
		BufferDC.FillSolidRect(rcItem.left+MENU_BAR_CX,rcItem.top,rcItem.Width()-MENU_BAR_CX,rcItem.Height(),crNormalBack);

	//焦点边框
	if ((bSelected==true)&&(bGrayed==false)&&(pEasySkinMenuItem!=NULL)&&(pEasySkinMenuItem->m_MenuItemType!=MenuItemType_Separator))
	{
		if ( m_pMenuHoven != NULL && m_pMenuHoven->IsNull() == false )
		{
			CRect rcSelItem(rcItem);
			rcSelItem.left += 1;
			rcSelItem.top += 1;
			rcSelItem.bottom -= 1;
			m_pMenuHoven->Draw(&BufferDC,CRect(rcSelItem.left+1,rcSelItem.top+1,rcSelItem.Width()-1,rcSelItem.top+rcSelItem.Height()-1));
		}
		else
			BufferDC.FillSolidRect(rcItem.left+2,rcItem.top+2,rcItem.Width()-4,rcItem.Height()-4,crBorder);
	}

	//绘制箭头
	if ( pEasySkinMenuItem->m_hSubMenu != NULL )
	{
		if ( m_pArrow != NULL && m_pArrow->IsNull() == false )
		{
			CRect rcArrow(rcItem.right-5-m_pArrow->GetWidth(),rcItem.top+(rcItem.Height()-m_pArrow->GetHeight())/2,rcItem.right-5,rcItem.top+(rcItem.Height()+m_pArrow->GetHeight())/2);
			m_pArrow->DrawImage(&BufferDC,rcArrow.left,rcArrow.top);
		}
	}


	//选择标志
	if (bChecked)
	{	
		if ( m_pCheck != NULL && m_pCheck->IsNull() == false )
		{
			CRect rcIcon(rcItem.left,rcItem.top,MENU_BAR_CX,rcItem.bottom);
			m_pCheck->DrawImage(&BufferDC,(rcIcon.Width()-m_pCheck->GetWidth())/2,rcIcon.top+(rcIcon.Height()-m_pCheck->GetHeight())/2);
		}
	}

	//其他菜单
	if (pEasySkinMenuItem==NULL)
	{
		//获取信息
		MENUITEMINFO MenuItemInfo;
		MenuItemInfo.cbSize=sizeof(MenuItemInfo);
		MenuItemInfo.fMask=MIIM_FTYPE|MIIM_BITMAP;
		GetMenuItemInfo(lpDrawItemStruct->itemID,&MenuItemInfo);

		return;
	}

	//界面菜单
	switch (pEasySkinMenuItem->m_MenuItemType)
	{
	case MenuItemType_String:		//字符菜单
		{
			//变量定义
			CEasySkinMenuString * pEasySkinMenuString=(CEasySkinMenuString *)pEasySkinMenuItem;

			CRect rcIcon(rcItem.left,rcItem.top,MENU_BAR_CX,rcItem.bottom);

			if ( bSelected )
			{
				if ( pEasySkinMenuString->m_pImageH != NULL && pEasySkinMenuString->m_pImageH->IsNull() == false )
					pEasySkinMenuString->m_pImageH->DrawImage(&BufferDC,(rcIcon.Width()-pEasySkinMenuString->m_pImageH->GetWidth())/2,rcIcon.top+(rcIcon.Height()-pEasySkinMenuString->m_pImageH->GetHeight())/2);
				else if ( pEasySkinMenuString->m_pImageN != NULL && pEasySkinMenuString->m_pImageN->IsNull() == false )
					pEasySkinMenuString->m_pImageN->DrawImage(&BufferDC,(rcIcon.Width()-pEasySkinMenuString->m_pImageN->GetWidth())/2,rcIcon.top+(rcIcon.Height()-pEasySkinMenuString->m_pImageN->GetHeight())/2);
			}
			else
			{
				if ( pEasySkinMenuString->m_pImageN != NULL && pEasySkinMenuString->m_pImageN->IsNull() == false )
					pEasySkinMenuString->m_pImageN->DrawImage(&BufferDC,(rcIcon.Width()-pEasySkinMenuString->m_pImageN->GetWidth())/2,rcIcon.top+(rcIcon.Height()-pEasySkinMenuString->m_pImageN->GetHeight())/2);
			}

			//设置颜色
			BufferDC.SetBkMode(TRANSPARENT);
			BufferDC.SelectObject(GetCtrlFont());

			//设置颜色
			if (bGrayed==true) BufferDC.SetTextColor(m_colDisableText);
			else if (bSelected==true) BufferDC.SetTextColor(m_colSelectText);
			else BufferDC.SetTextColor(m_colNormalText);

			//绘画字符
			CRect rcString;
			rcString.top=rcItem.top;
			rcString.bottom=rcItem.bottom;
			rcString.right=rcItem.right-SPACE_RIGHT;
			rcString.left=rcItem.left+MENU_BAR_CX+SPACE_LEFT;
			BufferDC.DrawText(pEasySkinMenuString->m_strString,pEasySkinMenuString->m_strString.GetLength(),&rcString,DT_SINGLELINE|DT_VCENTER|DT_NOCLIP);

			break;
		}
	case MenuItemType_Separator:	//拆分菜单
		{
			//绘画拆分
			if ( m_pSeparator != NULL && m_pSeparator->IsNull() == false )
				m_pSeparator->Draw(&BufferDC,CRect(rcItem.left+MENU_BAR_CX+SPACE_LEFT,rcItem.top+1,rcItem.right-SPACE_RIGHT,rcItem.Height()-2));
			else
				BufferDC.FillSolidRect(rcItem.left+MENU_BAR_CX+SPACE_LEFT,rcItem.top+1,rcItem.Width()-MENU_BAR_CX-SPACE_LEFT-SPACE_RIGHT,rcItem.Height()-2,m_crSeparator);

			//补齐分隔条处的边框颜色
			UIRenderEngine->DrawLine(BufferDC.GetSafeHdc(),CRect(rcItem.left,rcItem.top,rcItem.left+1,rcItem.top+rcItem.Height()+1),1,m_colFrameNormal);
			UIRenderEngine->DrawLine(BufferDC.GetSafeHdc(),CRect(rcItem.right-1,rcItem.top,rcItem.right,rcItem.top+rcItem.Height()+1),1,m_colFrameNormal);

			break;
		}
	}

	//绘制边框色
	int nSeparatorCount = GetSeparatorCount();

	CRect rcClient(0,0,rcItem.right,0);
	rcClient.bottom = rcItem.Height()*(GetMenuItemCount()-nSeparatorCount)+SEPARATOR_CY*nSeparatorCount;

	UIRenderEngine->DrawRect(BufferDC.GetSafeHdc(),rcClient,1,m_colFrameNormal);

	//绘画界面
	pDC->BitBlt(rcItem.left,rcItem.top,rcItem.Width(),rcItem.Height(),&BufferDC,rcItem.left,rcItem.top,SRCCOPY);

	//抠掉子节点区域,从而屏蔽系统绘制的倒三角
	if ( (pEasySkinMenuItem->m_hSubMenu != NULL) &&  (m_pArrow != NULL && m_pArrow->IsNull() == false))
		pDC->ExcludeClipRect(rcItem.left, rcItem.top, rcItem.right, rcItem.bottom);

	return;
}
Example #13
0
void CSkinListBox::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	
	CRect rcClient;
	GetClientRect(&rcClient);

	CMemoryDC BufferDC(&dc,rcClient);

 	//创建缓冲
 	CImage ImageBuffer;
 	ImageBuffer.Create(rcClient.Width(),rcClient.Height(),32);
 
 	//变量定义
 	CDC * pBufferDC=CDC::FromHandle(ImageBuffer.GetDC());

	//变量定义
	CRect rcItem;

	pBufferDC->SelectObject(GetCtrlFont());

	//绘画背景
	pBufferDC->FillSolidRect(0,0,rcClient.Width(),rcClient.Height(),m_colBack);
	DrawParentWndBg(GetSafeHwnd(),pBufferDC->GetSafeHdc());

	if (m_pBackImgN != NULL && !m_pBackImgN->IsNull())
		m_pBackImgN->Draw(pBufferDC, rcClient);

	for (int i=0;i<GetCount();i++)
	{	
		GetItemRect(i,&rcItem);

		//获取字符
		CString strString;
		GetText(i,strString);

		//计算位置
		CRect rcString;
		rcString.SetRect(rcItem.left+4,rcItem.top,rcItem.right-8,rcItem.bottom);

		bool bSelect = GetSel(i);

		//颜色定义
		COLORREF crTextColor=bSelect?m_colSelectText:m_colNormalText;

		//节点选中
		if ( bSelect )
		{
			if ( m_pSelectImg!= NULL && !m_pSelectImg->IsNull() )
			{
				m_pSelectImg->Draw(pBufferDC,CRect(rcItem.left,rcItem.top,rcItem.right,rcItem.bottom));
			}
		}

		//节点高亮
		else if ( m_nHovenItem == i )
		{
			if ( m_pBackImgH!= NULL && !m_pBackImgH->IsNull() )
			{
				m_pBackImgH->Draw(pBufferDC,CRect(rcItem.left,rcItem.top,rcItem.right,rcItem.bottom));
			}
		}

		//绘画字符
		pBufferDC->SetBkMode(TRANSPARENT);
		pBufferDC->SetTextColor(crTextColor);
		pBufferDC->DrawText(strString,&rcString,DT_VCENTER|DT_SINGLELINE);
	}

 	//绘画界面
 	BufferDC.BitBlt(0,0,rcClient.Width(),rcClient.Height(),pBufferDC,0,0,SRCCOPY);
 
 	//清理资源
 	ImageBuffer.ReleaseDC();
}
void CDlgMatchAwards::OnPaint()
{
	CPaintDC dc(this);
	CRect rcClient;
	GetClientRect(&rcClient);

	//建立缓冲
	CImage ImageBuffer;
	ImageBuffer.Create(rcClient.Width(),rcClient.Height(),32);

	//创建 DC
	CImageDC BufferDC(ImageBuffer);
	CDC * pBufferDC=CDC::FromHandle(BufferDC);

	//变量定义
	CPngImage ImageBack;

	//加载图片
	ImageBack.LoadImage(GetModuleHandle(GAME_FRAME_DLL_NAME), TEXT("MATCH_AWARDS"));

	ImageBack.DrawImage(&dc, 0,0);

	//创建字体
	CFont DrawFont;
	DrawFont.CreateFont(20,0,0,0,300,0,0,0,134,3,2,1,2,TEXT("黑体"));
	CFont * pOldFont=pBufferDC->SelectObject(&DrawFont);
	pBufferDC->SetTextColor(RGB(218,31,23));

	//变量定义
	CPngImage ImageAwards;

	//加载图片
	ImageAwards.LoadImage(GetModuleHandle(GAME_FRAME_DLL_NAME), TEXT("MATCH_AWARDS"));

	//计算位置
	INT nXPos=(rcClient.Width()-ImageAwards.GetWidth())/2;
	INT nYPos=(rcClient.Height()-ImageAwards.GetHeight())/2;

	//绘画奖励
	if(m_pMatchResult!=NULL)
	{
		ImageAwards.DrawImage(pBufferDC,nXPos,nYPos);
		pBufferDC->DrawText(m_pMatchResult->szDescribe, &CRect(nXPos+60,nYPos+115,nXPos+382,nYPos+195),DT_TOP|DT_WORDBREAK);

		pBufferDC->SelectObject(pOldFont);
		pBufferDC->SetTextColor(RGB(0,0,0));

		int nIndex=0;
		CString strText;

		//游戏币奖励
		if(m_pMatchResult->dwGold>0)
		{
			strText.Format(TEXT("◆ %d游戏币"), m_pMatchResult->dwGold);
			pBufferDC->DrawText(strText, &CRect(nXPos+60,nYPos+205,nXPos+360,nYPos+230),DT_TOP|DT_LEFT|DT_SINGLELINE);
			nIndex++;
		}

		//奖牌奖励
		if(m_pMatchResult->dwMedal>0)
		{
			strText.Format(TEXT("◆ %d奖牌"), m_pMatchResult->dwMedal);
			pBufferDC->DrawText(strText, &CRect(nXPos+60,nYPos+205+nIndex*30,nXPos+360,nYPos+230+nIndex*30),DT_TOP|DT_LEFT|DT_SINGLELINE);
			nIndex++;
		}

		//经验奖励
		if(m_pMatchResult->dwExperience>0)
		{
			strText.Format(TEXT("◆ %d经验"), m_pMatchResult->dwExperience);
			pBufferDC->DrawText(strText, &CRect(nXPos+60,nYPos+205+nIndex*30,nXPos+360,nYPos+230+nIndex*30),DT_TOP|DT_LEFT|DT_SINGLELINE);
			nIndex++;
		}

		//清理资源
		DrawFont.DeleteObject();
	}

	//绘画界面
	dc.BitBlt(0,0,rcClient.Width(),rcClient.Height(),pBufferDC,0,0,SRCCOPY);
}