//界面绘画函数 void CSkinButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { //定义变量 CRect ClientRect; GetClientRect(&ClientRect); bool bDisable=((lpDrawItemStruct->itemState&ODS_DISABLED)!=0); bool bButtonDown=((lpDrawItemStruct->itemState&ODS_SELECTED)!=0); //设置 DC HDC hDC=lpDrawItemStruct->hDC; //获取文字 CString strText; GetWindowText(strText); //加载背景图 CImageHandle ImageHandle; if (m_ImageBack.IsSetLoadInfo()) ImageHandle.AttachResource(&m_ImageBack); else ImageHandle.AttachResource(&m_SkinAttribute.m_ImageBack); if (ImageHandle.IsResourceValid()) { //计算位图位置 int iPartWidth=ImageHandle->GetWidth()/5,iDrawPos=0; if (bDisable) iDrawPos=iPartWidth*4; else if (bButtonDown) iDrawPos=iPartWidth; else if (m_bHovering) iDrawPos=iPartWidth*3; else if (lpDrawItemStruct->itemState&ODS_FOCUS) iDrawPos=iPartWidth*2; //绘画背景图 if (m_bExpand==false) ImageHandle->BitBlt(hDC,0,0,ClientRect.Width(),ClientRect.Height(),iDrawPos,0,SRCCOPY); else ImageHandle->StretchBlt(hDC,0,0,ClientRect.Width(),ClientRect.Height(),iDrawPos,0,iPartWidth,ImageHandle->GetHeight(),SRCCOPY); } else { //绘画默认界面 CDC * pDC=CDC::FromHandle(hDC); pDC->FillSolidRect(&ClientRect,GetSysColor(COLOR_BTNFACE)); if (bButtonDown) pDC->Draw3dRect(&ClientRect,GetSysColor(COLOR_WINDOWFRAME),GetSysColor(COLOR_3DHILIGHT)); else pDC->Draw3dRect(&ClientRect,GetSysColor(COLOR_3DHILIGHT),GetSysColor(COLOR_WINDOWFRAME)); } //绘画图标 if (bButtonDown) ClientRect.top+=2; if (m_hIcon) { DrawIconEx(hDC,ClientRect.left+6,ClientRect.top+(ClientRect.Height()-16)/2+1,m_hIcon,16,16,0,NULL,DI_NORMAL); ClientRect.left+=22; } //绘画字体 ClientRect.top+=1; ::SetBkMode(hDC,TRANSPARENT); if (bDisable) ::SetTextColor(hDC,GetSysColor(COLOR_GRAYTEXT)); else ::SetTextColor(hDC,m_crTextColor); DrawText(hDC,strText,strText.GetLength(),ClientRect,DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS); return; }
//界面绘画函数 void CSkinButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { //加载背景图 CImageHandle ImageHandle; if (m_ImageBack.IsSetLoadInfo()) ImageHandle.AttachResource(&m_ImageBack); else { CRect ClientRect1; GetClientRect(&ClientRect1); ImageHandle.AttachResource(&m_SkinAttribute.m_ImageBack); SetWindowPos(NULL,0,0,ClientRect1.Width(),ImageHandle->GetHeight(),SWP_NOMOVE); } //定义变量 CRect ClientRect; GetClientRect(&ClientRect); bool bDisable=((lpDrawItemStruct->itemState&ODS_DISABLED)!=0); bool bButtonDown=((lpDrawItemStruct->itemState&ODS_SELECTED)!=0); bool bFocus = ((lpDrawItemStruct->itemState & ODS_FOCUS)!=0); //设置 DC HDC hDC=lpDrawItemStruct->hDC; //获取文字 CString strText; GetWindowText(strText); if (ImageHandle.IsResourceValid()) { //计算位图位置 int iPartWidth=ImageHandle->GetWidth()/5; int iPartHeight=ImageHandle->GetHeight(); int iDrawPos=0; if (bDisable) iDrawPos = iPartWidth * 4; else if (bButtonDown) iDrawPos = iPartWidth; else if (m_bHovering) iDrawPos = iPartWidth * 3; else if( bFocus ) iDrawPos = iPartWidth * 2; //绘画背景图 if (m_bExpand==false) ImageHandle->BitBlt(hDC,0,0,ClientRect.Width(),ClientRect.Height(),iDrawPos,0,SRCCOPY); else ImageHandle->DrawSkin(CDC::FromHandle(hDC), &ClientRect, iDrawPos, 0, iPartWidth, iPartHeight, DS_STRETCH_ALL, 3, 3, 3, 3); } else { //绘画默认界面 CDC * pDC=CDC::FromHandle(hDC); pDC->FillSolidRect(&ClientRect,GetSysColor(COLOR_BTNFACE)); if (bButtonDown) pDC->Draw3dRect(&ClientRect,GetSysColor(COLOR_WINDOWFRAME),GetSysColor(COLOR_3DHILIGHT)); else pDC->Draw3dRect(&ClientRect,GetSysColor(COLOR_3DHILIGHT),GetSysColor(COLOR_WINDOWFRAME)); } //绘画图标 if (bButtonDown) { ClientRect.top+=2; // ClientRect1.top+=2; } if (m_hIcon) { DrawIconEx(hDC,ClientRect.left+6,ClientRect.top+(ClientRect.Height()-16)/2+1,m_hIcon,16,16,0,NULL,DI_NORMAL); ClientRect.left+=22; } //绘画字体 ClientRect.top+=1; // ClientRect1.top+=2; //ClientRect1.left+=2; ::SetBkMode(hDC,TRANSPARENT); // CFont InfoFont; // InfoFont.CreateFont(-24,0,0,0,700,0,0,0,134,3,2,1,1,TEXT("楷体_GB2312")); CFont Font; Font.CreateFontIndirect(&m_BtnFont); ////////////////////////////////////////////////////////////////////////// CDC* dc = CDC::FromHandle(hDC); CFont* pOldFont = dc->SelectObject (&Font); if(!m_bShowTextFrame) { if (bDisable) ::SetTextColor(hDC,m_crTextColor/*RGB(0,0,0)*/); else ::SetTextColor(hDC,m_crTextColor/*RGB(0,0,0)*/); DrawText(hDC,strText,strText.GetLength(),ClientRect,DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS); } //艺术字体 else { if(bDisable) ::SetTextColor(hDC,m_crTextColor/*RGB(0,0,0)*/); else ::SetTextColor(hDC,m_crTextColor/*RGB(0,0,0)*/); //DrawText(hDC,strText,strText.GetLength(),ClientRect1,DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS); DrawTextString(CDC::FromHandle(hDC), strText, m_crTextColor, m_crTextFrameColor, ClientRect); } // Select old font in dc->SelectObject(pOldFont); return; }
//绘画标题栏 bool CSkinWndObject::DrawCaption(CDC * pDC, int cx, int cy) { //加载位图 CImageHandle TitleLeft(&m_SkinAttribute.m_TitleLeft); if (m_SkinAttribute.m_TitleLeft.IsNull()) return false; CImageHandle TitleMid(&m_SkinAttribute.m_TitleMid); if (m_SkinAttribute.m_TitleMid.IsNull()) return false; CImageHandle TitleRight(&m_SkinAttribute.m_TitleRight); if (m_SkinAttribute.m_TitleRight.IsNull()) return false; //绘画标题 int nLeftWidth=TitleLeft->GetWidth(); int nMidWidth=TitleMid->GetWidth(); int nRightWidth=TitleRight->GetWidth(); int nXMinDrawPause=cx-nRightWidth; TitleLeft->BitBlt(pDC->m_hDC,0,0); for (int i=nLeftWidth;i<nXMinDrawPause;i+=nMidWidth) TitleMid->BitBlt(pDC->m_hDC,i,0); TitleRight->BitBlt(pDC->m_hDC,nXMinDrawPause,0); //绘画文字 CString strTitle; CRect rcTitleRect(45,4,cx-100,cy-2); m_pWndHook->GetWindowText(strTitle); pDC->SetBkMode(TRANSPARENT); pDC->SelectObject(&m_SkinAttribute.m_DefaultFont); pDC->SetTextColor(m_SkinAttribute.m_crCaptionTXColor); pDC->DrawText(strTitle,&rcTitleRect,DT_LEFT|DT_SINGLELINE|DT_VCENTER|DT_END_ELLIPSIS); //关闭按钮 if (m_cbButtonState[BST_CLOSE]&BUT_EXIST) { int nDrawPos=0; CImageHandle ImageHandle(&m_SkinAttribute.m_ButtonClose); if (m_cbButtonState[BST_CLOSE]&BUT_DISABLE) { nDrawPos=ImageHandle->GetWidth()*3/4; } else if (m_cbNowDownButton==BST_CLOSE) { nDrawPos=ImageHandle->GetWidth()*2/4; } else if (m_cbNowHotButton==BST_CLOSE) { nDrawPos=ImageHandle->GetWidth()/4; } ImageHandle->BitBlt(pDC->GetSafeHdc(),m_rcButton[BST_CLOSE].left,m_rcButton[BST_CLOSE].top, m_SkinAttribute.m_nButtonWidth,m_SkinAttribute.m_nButtonHeigth,nDrawPos,0); } //最大化和还原按钮 if (m_cbButtonState[BST_MAX]&BUT_EXIST) { int nDrawPos=0; CImageHandle ImageHandle; if (m_bMaxSize==true) ImageHandle.AttachResource(&m_SkinAttribute.m_ButtonRes); else ImageHandle.AttachResource(&m_SkinAttribute.m_ButtonMax); if (m_cbButtonState[BST_MAX]&BUT_DISABLE) { nDrawPos=ImageHandle->GetWidth()*3/4; } if (m_cbNowDownButton==BST_MAX) { nDrawPos=ImageHandle->GetWidth()*2/4; } else if (m_cbNowHotButton==BST_MAX) { nDrawPos=ImageHandle->GetWidth()/4; } ImageHandle->BitBlt(pDC->GetSafeHdc(),m_rcButton[BST_MAX].left,m_rcButton[BST_MAX].top, m_SkinAttribute.m_nButtonWidth,m_SkinAttribute.m_nButtonHeigth,nDrawPos,0); } //最小化按钮 if (m_cbButtonState[BST_MIN]&BUT_EXIST) { int nDrawPos=0; CImageHandle ImageHandle(&m_SkinAttribute.m_ButtonMin); if (m_cbButtonState[BST_MIN]&BUT_DISABLE) { nDrawPos=ImageHandle->GetWidth()*3/4; } if (m_cbNowDownButton==BST_MIN) { nDrawPos=ImageHandle->GetWidth()*2/4; } else if (m_cbNowHotButton==BST_MIN) { nDrawPos=ImageHandle->GetWidth()/4; } ImageHandle->BitBlt(pDC->GetSafeHdc(),m_rcButton[BST_MIN].left,m_rcButton[BST_MIN].top, m_SkinAttribute.m_nButtonWidth,m_SkinAttribute.m_nButtonHeigth,nDrawPos,0); } return true; }
//绘画标题栏 bool CSkinWndObject::DrawCaption(CDC * pDC, int cx, int cy) { //加载位图 CImageHandle TitleLeft(&m_SkinAttribute.m_TitleLeft); if (m_SkinAttribute.m_TitleLeft.IsNull()) return false; CImageHandle TitleMid(&m_SkinAttribute.m_TitleMid); if (m_SkinAttribute.m_TitleMid.IsNull()) return false; CImageHandle TitleRight(&m_SkinAttribute.m_TitleRight); if (m_SkinAttribute.m_TitleRight.IsNull()) return false; //绘画标题 int nLeftWidth=TitleLeft->GetWidth(); int nMidWidth=TitleMid->GetWidth(); int nRightWidth=TitleRight->GetWidth(); int nXMinDrawPause=cx-nRightWidth; TitleLeft->BitBlt(pDC->m_hDC,0,0); //m_SkinAttribute.m_TitleLeft.AlphaDrawImage(pDC,0,0,RGB(255,0,255)); for (int i=nLeftWidth;i<nXMinDrawPause;i+=nMidWidth) TitleMid->BitBlt(pDC->m_hDC,i,0); TitleRight->BitBlt(pDC->m_hDC,nXMinDrawPause,0); m_SkinAttribute.m_TitleRight.AlphaDrawImage(pDC,nXMinDrawPause,0,RGB(255,0,255)); //绘画文字 CString strTitle; CRect rcTitleRect(35,4,cx-100,cy-2); m_pWndHook->GetWindowText(strTitle); pDC->SetBkMode(TRANSPARENT); pDC->SelectObject(&m_SkinAttribute.m_DefaultFont); pDC->SetTextColor(m_SkinAttribute.m_crCaptionTXColor); //pDC->DrawText(strTitle,&rcTitleRect,DT_LEFT|DT_SINGLELINE|DT_VCENTER|DT_END_ELLIPSIS); ////////////////////////////////////////////////////////////////////////// pDC->DrawText(strTitle,&rcTitleRect,DT_LEFT|DT_SINGLELINE|DT_VCENTER|DT_END_ELLIPSIS); //变量定义 // int nStringLength=lstrlen(strTitle); // int nXExcursion[8]={1,1,1,0,-1,-1,-1,0}; // int nYExcursion[8]={-1,0,1,1,1,0,-1,-1}; // // //绘画边框 // pDC->SetTextColor(m_SkinAttribute.m_crCaptionTXColor/*RGB(0,98,142)*/); // CRect rcDraw; // for (int i=0;i<CountArray(nXExcursion);i++) // { // rcDraw.CopyRect(rcTitleRect); // rcDraw.OffsetRect(nXExcursion[i],nYExcursion[i]); // pDC->DrawText(strTitle,nStringLength,&rcDraw,DT_LEFT|DT_SINGLELINE|DT_VCENTER|DT_END_ELLIPSIS); // } // // //绘画字体 // rcDraw.CopyRect( rcTitleRect); // pDC->SetTextColor(m_SkinAttribute.m_crCaptionTXColor); // pDC->DrawText(strTitle,nStringLength,&rcDraw,DT_LEFT|DT_SINGLELINE|DT_VCENTER|DT_END_ELLIPSIS); // ////////////////////////////////////////////////////////////////////////// CImageHandle ButtonHandle(&m_SkinAttribute.m_ButtonClose); if (ButtonHandle.IsResourceValid()) { m_SkinAttribute.m_nButtonHeigth=ButtonHandle->GetHeight(); m_SkinAttribute.m_nButtonWidth=ButtonHandle->GetWidth()/5; } else { m_SkinAttribute.m_nButtonHeigth=0; m_SkinAttribute.m_nButtonWidth=0; } //关闭按钮 if (m_cbButtonState[BST_CLOSE]&BUT_EXIST) { int nDrawPos=0; CImageHandle ImageHandle(&m_SkinAttribute.m_ButtonClose); if (m_cbButtonState[BST_CLOSE]&BUT_DISABLE) { nDrawPos=ImageHandle->GetWidth()*3/5; } else if (m_cbNowDownButton==BST_CLOSE) { nDrawPos=ImageHandle->GetWidth()*2/5; } else if (m_cbNowHotButton==BST_CLOSE) { nDrawPos=ImageHandle->GetWidth()/5; } ImageHandle->BitBlt(pDC->GetSafeHdc(),m_rcButton[BST_CLOSE].left,m_rcButton[BST_CLOSE].top, m_SkinAttribute.m_nButtonWidth,m_SkinAttribute.m_nButtonHeigth,nDrawPos,0); } //最大化和还原按钮 if (m_cbButtonState[BST_MAX]&BUT_EXIST) { int nDrawPos=0; CImageHandle ImageHandle; if (m_bMaxSize==true) ImageHandle.AttachResource(&m_SkinAttribute.m_ButtonRes); else ImageHandle.AttachResource(&m_SkinAttribute.m_ButtonMax); if (m_cbButtonState[BST_MAX]&BUT_DISABLE) { nDrawPos=ImageHandle->GetWidth()*3/5; } if (m_cbNowDownButton==BST_MAX) { nDrawPos=ImageHandle->GetWidth()*2/5; } else if (m_cbNowHotButton==BST_MAX) { nDrawPos=ImageHandle->GetWidth()/5; } ImageHandle->BitBlt(pDC->GetSafeHdc(),m_rcButton[BST_MAX].left,m_rcButton[BST_MAX].top, m_SkinAttribute.m_nButtonWidth,m_SkinAttribute.m_nButtonHeigth,nDrawPos,0); } //最小化按钮 if (m_cbButtonState[BST_MIN]&BUT_EXIST) { int nDrawPos=0; CImageHandle ImageHandle(&m_SkinAttribute.m_ButtonMin); if (m_cbButtonState[BST_MIN]&BUT_DISABLE) { nDrawPos=ImageHandle->GetWidth()*3/5; } if (m_cbNowDownButton==BST_MIN) { nDrawPos=ImageHandle->GetWidth()*2/5; } else if (m_cbNowHotButton==BST_MIN) { nDrawPos=ImageHandle->GetWidth()/5; } ImageHandle->BitBlt(pDC->GetSafeHdc(),m_rcButton[BST_MIN].left,m_rcButton[BST_MIN].top, m_SkinAttribute.m_nButtonWidth,m_SkinAttribute.m_nButtonHeigth,nDrawPos,0); } return true; }