Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
//////////////////////////////////////////////////////////////////////////
// 画按钮文字
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);
	
	
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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
}
Ejemplo n.º 6
0
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();
}