void CIconSelector::DrawCellLine(CDC* pDC) { int nSavedDC; int i; nSavedDC = pDC->SaveDC(); CPen penInside(PS_SOLID, 1, ICONSEL_COLOR_LINE); pDC->SelectObject(&penInside); // 세로선 for(i = 1; i < m_nRowCount; i++) { pDC->MoveTo(m_szCell.cx * i + i, 0); pDC->LineTo(m_szCell.cx * i + i, m_szCell.cy * m_nRowCount + m_nRowCount + 1); } // 가로선 for(i = 1; i < m_nRowCount; i++) { pDC->MoveTo(0, m_szCell.cy * i + i); pDC->LineTo(m_szCell.cx * m_nColCount + m_nColCount + 1, m_szCell.cy * i + i); } CPen penBorder(PS_SOLID, 1, RGB(0, 0, 0)); pDC->SelectObject(&penBorder); pDC->SelectStockObject(NULL_BRUSH); CRect rc; GetClientRect(rc); pDC->Rectangle(rc); pDC->RestoreDC(nSavedDC); }
////////////////////////////////////////////////////////////////////////// // 画按钮文字 void CAnimateButton::DrawBtnText(CDC *pDC) { pDC->SetBkMode(TRANSPARENT); pDC->SelectObject(m_fontTxt); CRect dcRect; if(m_ato.nPosition == TXTPOS_IN) dcRect.SetRect(0, 0, m_aniBtnWidth, m_aniBtnHeight); else dcRect = m_rcTextBox; CPen penBorder(PS_SOLID, m_ato.nBorderThickness, m_ato.clrBorder); int i = m_ato.nPosition == TXTPOS_IN ? 0 : m_aniBtnState; int nUpbound = m_ato.nPosition == TXTPOS_IN ? 4 : m_aniBtnState; for(; i <= nUpbound; i ++) { if(i >= 3) dcRect.SetRect(m_aniBtnWidth * i, 0, m_aniBtnWidth * (i + 1), m_aniBtnHeight); if(m_ato.n3DStyle) { //阴影: if((m_ato.n3DStyle & TEXT3D_SHADOW) && (i != STATE_PRESSED))//为按下状态时不要阴影效果! { pDC->SetTextColor(RGB(128, 128, 128)); CRect rcShadow = dcRect; rcShadow.OffsetRect(m_ato.nOffsetShadow, m_ato.nOffsetShadow); pDC->DrawText(m_strBtnText, &rcShadow, m_ato.nFormat); pDC->SetTextColor(m_ato.clrText); } //只描轮廓不填充(这样看起来才平滑) if(m_ato.n3DStyle & TEXT3D_STROKE) { pDC->SelectObject(&penBorder); pDC->BeginPath(); pDC->DrawText(m_strBtnText, &dcRect, m_ato.nFormat); pDC->EndPath(); pDC->StrokePath(); } } i == STATE_HOVERED ? pDC->SetTextColor(m_ato.clrTextHovered) : pDC->SetTextColor(m_ato.clrText); pDC->DrawText(m_strBtnText, &dcRect, m_ato.nFormat); if(i < 3) dcRect.OffsetRect(m_aniBtnWidth + i % 3, i % 3); } }
void CPlugFrame::OnPaint() { CPaintDC dc(this); dc.SetTextColor (m_clrCaptionText); CBrush br (m_clrBkCaption); CBrush *oldBr = dc.SelectObject (&br); CFont *oldFont = dc.SelectObject (&m_font); CPen pen (PS_SOLID, 1, m_clrBkCaption), penBorder (PS_SOLID, 2, GetSysColor (COLOR_3DDKSHADOW)); CRect rcCaption; GetClientRect (&rcCaption); rcCaption.bottom = m_dyCaption - 3; CPen *oldPen = dc.SelectObject (&pen); dc.Rectangle (&rcCaption); dc.SetBkMode (TRANSPARENT); rcCaption.left = 10; dc.DrawText (m_strFrameName, &rcCaption, DT_SINGLELINE | DT_VCENTER); CPen penShadow (PS_SOLID, 1, GetSysColor (COLOR_3DSHADOW)); dc.SelectObject (&penShadow); dc.MoveTo (0, m_dyCaption - 1); dc.LineTo (rcCaption.right, m_dyCaption - 1); dc.SelectObject (oldBr); dc.SelectObject (oldFont); dc.SelectObject (oldPen); }
BOOL CMyDialog::OnEraseBkgnd(CDC* pDC) { // TODO: Add your message handler code here and/or call default // BOOL bResult=CDialog::OnEraseBkgnd(pDC); if (!m_bHaveStoreBgDC) { CRect rect; GetClientRect(rect); m_bHaveStoreBgDC=TRUE; Color clrStart=Color(230,230,230); Color clrEnd=Color(255,255,255); m_StoreBgDC.DeleteDC(); m_StoreBgDC.CreateCompatibleDC(pDC); CBitmap bmp; bmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height()); CBitmap *pOldBmp=m_StoreBgDC.SelectObject(&bmp); Graphics myGraphics(m_StoreBgDC.m_hDC); LinearGradientBrush linGrBrush( Rect(0,0,rect.Width(),rect.Height()), clrStart, clrEnd, LinearGradientModeVertical); myGraphics.FillRectangle(&linGrBrush, 0,31,rect.Width(),rect.Height()); Color clrCaptionStart(219,219,220); Color clrCaptionEnd(190,192,193); LinearGradientBrush linGrBrush1( Rect(0,0,rect.Width(),30), clrCaptionStart, clrCaptionEnd, LinearGradientModeVertical); myGraphics.FillRectangle(&linGrBrush1, 0,0,rect.Width(),30); DrawCloseButton(&m_StoreBgDC,DTS_NORMAL); DrawMinButton(&m_StoreBgDC,DTS_NORMAL); CPen MarkPen(PS_SOLID,1,RGB(158,158,158)); CBrush *pOldBrush=(CBrush *)m_StoreBgDC.SelectStockObject(NULL_BRUSH); CPen *pOldPen=m_StoreBgDC.SelectObject(&MarkPen); m_StoreBgDC.RoundRect(m_rcMin.left-1,m_rcMin.top-5,m_rcClose.right+1,m_rcClose.bottom+1,5,5); CPen penBorder(PS_SOLID,1,RGB(150,150,150)); m_StoreBgDC.SelectObject(&penBorder); m_StoreBgDC.MoveTo(0,30); m_StoreBgDC.LineTo(rect.Width(),30); m_StoreBgDC.MoveTo(m_rcClose.left-1,1); m_StoreBgDC.LineTo(m_rcClose.left-1,21); rect.DeflateRect(0,0,1,1); m_StoreBgDC.RoundRect(rect,CPoint(7,5)); m_StoreBgDC.SelectObject(pOldPen); m_StoreBgDC.SelectObject(pOldBrush); rect.bottom=30; HICON hIcon=GetIcon(FALSE); if (hIcon) //画Icon { DrawIconEx(m_StoreBgDC.m_hDC,5,7,hIcon,16,16,0,NULL,DI_NORMAL | DI_COMPAT); rect.left+=21; m_rcIcon.SetRect(5,7,21,23); } CString str; GetWindowText(str); if (str!="") //写标题 { rect.left+=5; rect.top+=4; m_StoreBgDC.SetBkMode(TRANSPARENT); COLORREF OldClr=m_StoreBgDC.SetTextColor(RGB(50,50,50)); CFont font; font.CreatePointFont(100,"雅黑",&m_StoreBgDC); CFont *pOldFont=m_StoreBgDC.SelectObject(&font); m_StoreBgDC.DrawText(str,rect,DT_VCENTER | DT_SINGLELINE); m_StoreBgDC.SelectObject(pOldFont); m_StoreBgDC.SetTextColor(OldClr); font.DeleteObject(); } /* m_StoreBgDC.SelectObject(pOldBmp);*/ bmp.DeleteObject(); } CRect rect; GetClientRect(rect); pDC->BitBlt(0,0,rect.Width(),rect.Height(),&m_StoreBgDC,0,0,SRCCOPY); return TRUE; }
void CAdvComboBox::OnPaint() { CPaintDC dc(this); // device context for painting if( m_nCurSel != -1 ) { m_iter = m_list.begin(); advance( m_iter, m_nCurSel ); if( m_iter != m_list.end() ) { m_strEdit = m_iter->strText; } if( m_bFirstPaint ) { if( m_pEdit ) { m_pEdit->SetWindowText( m_strEdit.c_str() ); m_bFirstPaint = false; m_pEdit->EnableWindow( IsWindowEnabled() ); } } } CRect rect; CRect rcText; GetClientRect(rect); rcText = rect; rect.left = rect.right - ::GetSystemMetrics(SM_CXHSCROLL); rcText.right = rect.left-1; m_rcDropButton = rect; GetClientRect(rect); BOOL bWndEnabled = IsWindowEnabled(); COLORREF clrDisabledBkg = ::GetSysColor(COLOR_BTNFACE); COLORREF clrDisabledBorder = ::GetSysColor(COLOR_3DDKSHADOW); COLORREF clrDisabledText = ::GetSysColor(COLOR_GRAYTEXT); if( !bWndEnabled ) { if( 1 ) // Draw disabled flat control with border? Change to '0'. { dc.FillSolidRect( rect, clrDisabledBkg ); } else { CBrush brDisabled(clrDisabledBkg); CBrush* pOldBrush = dc.SelectObject(&brDisabled); CPen penDisabled( PS_SOLID, 0, clrDisabledBorder); CPen* pOldPen = dc.SelectObject(&penDisabled); dc.Rectangle(rect); dc.SelectObject(pOldBrush); dc.SelectObject(pOldPen); } } else { COLORREF clrEnabledBkg = ::GetSysColor(COLOR_WINDOW); dc.FillSolidRect( rect, clrEnabledBkg ); } DWORD dwBtnStyle = 0; if( !bWndEnabled ) { dwBtnStyle |= DFCS_INACTIVE; } dwBtnStyle |= m_bDropListVisible ? (DFCS_SCROLLDOWN|DFCS_PUSHED|DFCS_FLAT) : DFCS_SCROLLDOWN; BOOL bThemeActive = FALSE; HRESULT hr; bThemeActive = g_xpStyle.UseVisualStyles(); HTHEME hTheme = NULL; if( bThemeActive ) hTheme = g_xpStyle.OpenThemeData( m_hWnd, L"COMBOBOX" ); // Theme drop btn style int nDropBtnThemeStyle = 0; if( m_bDropListVisible ) { nDropBtnThemeStyle = CBXS_PRESSED; } else { nDropBtnThemeStyle = CBXS_NORMAL; if( m_bDropButtonHot ) nDropBtnThemeStyle = CBXS_HOT; if( !bWndEnabled ) nDropBtnThemeStyle = CBXS_DISABLED; } #if 0 // ----------------------------------------------------------- if( m_dwACBStyle & ACBS_FLAT ) { if( bThemeActive ) { hr = g_xpStyle.DrawThemeBackground( hTheme, dc.m_hDC, CP_DROPDOWNBUTTON, nDropBtnThemeStyle, &m_rcDropButton, NULL); } else { dc.DrawFrameControl(m_rcDropButton, DFC_SCROLL, dwBtnStyle ); } } else if( m_dwACBStyle & ACBS_STANDARD ) #endif // ----------------------------------------------------------- { if( bThemeActive ) { COLORREF clrBorder; hr = g_xpStyle.GetThemeColor( hTheme, BP_PUSHBUTTON, bWndEnabled ? PBS_NORMAL : PBS_DISABLED, TMT_BORDERCOLOR, &clrBorder ); if( FAILED( hr ) ) { clrBorder = RGB(0,0,0); } CPen penBorder( PS_SOLID, 0, clrBorder ); CPen* oldBorderPen = dc.SelectObject( &penBorder ); dc.Rectangle( &rect ); m_rcDropButton.DeflateRect(0,1,0,1); m_rcDropButton.left -= 1; m_rcDropButton.right -= 1; if( !bWndEnabled ) { COLORREF clrDisabledLightBorder; COLORREF clrDisabledFill; hr = g_xpStyle.GetThemeColor( hTheme, BP_PUSHBUTTON, bWndEnabled ? PBS_NORMAL : PBS_DISABLED, TMT_FILLCOLOR, &clrDisabledLightBorder ); if( FAILED( hr ) ) { clrDisabledLightBorder = RGB(255,255,255); } hr = g_xpStyle.GetThemeColor( hTheme, WP_DIALOG, 0, TMT_FILLCOLOR, &clrDisabledFill ); if( FAILED( hr ) ) { clrDisabledFill = RGB(255,0,0); } CPen penDisBorder( PS_SOLID, 0, clrDisabledLightBorder ); CBrush brFill( clrDisabledBkg );//clrDisabledFill ); CRect rcl = rect; rcl.DeflateRect(1,1); rcl.right = m_rcDropButton.left; CBrush *oldBr = dc.SelectObject( &brFill ); dc.SelectObject( &penDisBorder ); dc.Rectangle( &rcl ); dc.SelectObject( oldBr ); } dc.SelectObject( &oldBorderPen ); // Button hr = g_xpStyle.DrawThemeBackground( hTheme, dc.m_hDC, CP_DROPDOWNBUTTON, nDropBtnThemeStyle, &m_rcDropButton, NULL); } else { COLORREF clrTopLeft = ::GetSysColor(COLOR_3DSHADOW); COLORREF clrBottomRight = ::GetSysColor(COLOR_3DHILIGHT); dc.Draw3dRect( &rect, clrTopLeft, clrBottomRight ); clrTopLeft = ::GetSysColor(COLOR_3DDKSHADOW); clrBottomRight = ::GetSysColor(COLOR_3DLIGHT); rect.DeflateRect(1,1); dc.Draw3dRect( &rect, clrTopLeft, clrBottomRight ); m_rcDropButton.DeflateRect(0,2,0,2); m_rcDropButton.left -= 2; m_rcDropButton.right -= 2; // Button dc.DrawFrameControl(m_rcDropButton, DFC_SCROLL, dwBtnStyle ); } // // Adjust rects rcText.DeflateRect(4,3,2,3); } if( bThemeActive ) hr = g_xpStyle.CloseThemeData( hTheme ); if( (GetStyle() & CBS_DROPDOWN) && (GetStyle() & CBS_SIMPLE) ) // == CBS_DROPDOWNLIST { // // Draw Text as selected COLORREF clrBackground; COLORREF clrOldBkColor; COLORREF clrOldTextColor; clrBackground = ::GetSysColor(COLOR_HIGHLIGHT); clrOldBkColor = dc.SetBkColor( clrBackground ); // clrOldTextColor = dc.SetTextColor( ::GetSysColor(COLOR_HIGHLIGHTTEXT) ); int nOldBkMode = dc.SetBkMode( TRANSPARENT ); CFont* pOldFont = dc.SelectObject( m_pFont ); rcText.top -= 2; rcText.bottom += 2; rcText.left -= 2; rcText.right += 1; if( m_bHasFocus && !m_bDropListVisible ) { dc.FillSolidRect( rcText, bWndEnabled ? clrBackground : clrDisabledBkg ); clrOldTextColor = dc.SetTextColor( bWndEnabled ? ::GetSysColor(COLOR_HIGHLIGHTTEXT) : clrDisabledText ); dc.DrawText( m_strEdit.c_str(), &rcText, DT_SINGLELINE|DT_VCENTER); } else { //+++dc.FillSolidRect( rcText, //+++ bWndEnabled ? ::GetSysColor(COLOR_HIGHLIGHTTEXT) : clrDisabledBkg ); dc.FillSolidRect( rcText, bWndEnabled ? ::GetSysColor(COLOR_WINDOW) : clrDisabledBkg ); clrOldTextColor = dc.SetTextColor( bWndEnabled ? ::GetSysColor(COLOR_BTNTEXT) : clrDisabledText ); dc.DrawText( m_strEdit.c_str(), &rcText, DT_SINGLELINE|DT_VCENTER); } dc.SelectObject( pOldFont ); dc.SetBkMode( nOldBkMode ); } else { if( m_pEdit ) { m_pEdit->SetFont( m_pFont ); } } // Do not call CWnd::OnPaint() for painting messages }
void CSHeaderCtrl::DrawCtrl(CDC* pDC) { CRect rectClip; if (pDC->GetClipBox(&rectClip) == ERROR) return; CRect rectClient, rectItem; GetClientRect(&rectClient); // pDC->FillSolidRect(rectClient, m_cr3DFace); COLORREF colorStart = RGB(255, 255, 255); COLORREF colorEnd = RGB(199, 210, 226); gtb::DrawGradient(pDC, &rectClient, colorStart, colorEnd, FALSE); int iItems = GetItemCount(); ASSERT(iItems >= 0); CPen* pOldPen = pDC->GetCurrentPen(); CFont* pOldFont = pDC->SelectObject(GetFont()); COLORREF oldBkColor = pDC->SetBkColor(m_cr3DFace); pDC->SetTextColor(m_crBtnText); CPen penBorder(PS_SOLID, 1, m_crBorder); int iWidth = 0; CRect rectInter; for (int i = 0; i < iItems; i++) { int iItem = OrderToIndex(i); TCHAR szText[FLATHEADER_TEXT_MAX]; HDITEM hditem; hditem.mask = HDI_WIDTH|HDI_FORMAT|HDI_TEXT|HDI_IMAGE|HDI_BITMAP; hditem.pszText = szText; hditem.cchTextMax = sizeof(szText); VERIFY(GetItem(iItem, &hditem)); VERIFY(GetItemRect(iItem, rectItem)); //The item should be repaint rectClip.InflateRect(1, 0); //Inflate 1 pixel for the separator if(rectInter.IntersectRect(&rectItem, &rectClip)) { //Owner draw if (hditem.fmt & HDF_OWNERDRAW) { DRAWITEMSTRUCT disItem; disItem.CtlType = ODT_BUTTON; disItem.CtlID = GetDlgCtrlID(); disItem.itemID = iItem; disItem.itemAction = ODA_DRAWENTIRE; disItem.itemState = 0; disItem.hwndItem = m_hWnd; disItem.hDC = pDC->m_hDC; disItem.rcItem = rectItem; disItem.itemData = 0; DrawItem(&disItem); } //Draw by this else { rectItem.DeflateRect(m_nSpace, 0); DrawItem(pDC, rectItem, &hditem); rectItem.InflateRect(m_nSpace, 0); } //Draw separator if(m_bDividerLines) { pDC->SelectObject(&penBorder); pDC->MoveTo(rectItem.right, rectItem.top); pDC->LineTo(rectItem.right, rectItem.bottom); } } iWidth += hditem.cxy; } //Draw Border: bottom only pDC->FillSolidRect(rectClient.left, rectClient.bottom, rectClient.Width(), -1, m_crBorder); pDC->SetBkColor(oldBkColor); pDC->SelectObject(pOldFont); pDC->SelectObject(pOldPen); penBorder.DeleteObject(); }