//绘画背景 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; }
//确定函数 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(); }
//重画消息 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; }
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); }
//绘画背景 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; }
//绘画背景 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; }
//绘画函数 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; }
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); }