コード例 #1
0
// This function is called every time the button background needs to be painted.
// If the button is in transparent mode this function will NOT be called.
//
// Parameters:
//        [IN]    pDC
//                Pointer to a CDC object that indicates the device context.
//        [IN]    pRect
//                Pointer to a CRect object that indicates the bounds of the
//                area to be painted.
//
// Return value:
//        BTNST_OK
//            Function executed successfully.
//
DWORD CButtonST::OnDrawBackground(CDC* pDC, LPCRECT pRect)
{
    COLORREF crColor;

    if (m_bMouseOnButton || m_bIsPressed)
    {
        crColor = m_crColors[BTNST_COLOR_BK_IN];
    }
    else
    {
        crColor = m_crColors[BTNST_COLOR_BK_OUT];
    }

    CBrush brBackground(crColor);

    pDC->FillRect(pRect, &brBackground);

    return BTNST_OK;
} // End of OnDrawBackground
コード例 #2
0
ファイル: XButton.cpp プロジェクト: ForTrade/xTrader
///////////////////////////////////////////////////////////////////////////////
// Draw
void CXButton::Draw(CDC *pDC, CRect& rect)
{
	//XLISTCTRL_TRACE(_T("in CXButton::Draw:  <%s>\n"), m_strText);
	//TRACERECT(rect);

	if (m_hTheme == NULL)
	{
		// open theme for Button

		if (ThemeHelper.IsThemeLibAvailable())
		{
			//XLISTCTRL_TRACE(_T("opening theme data ~~~~~\n"));
			m_hTheme = ThemeHelper.OpenThemeData(m_pParent->m_hWnd, _T("Button"));
		}
	}

	CFont *pFont = m_pParent->GetFont();
	CFont *pOldFont = NULL;

	if (pFont)
		pOldFont = pDC->SelectObject(pFont);

	CRect rectButton(rect);

	m_rect.CopyRect(rectButton);

	//dc.SetBkMode(TRANSPARENT);
	pDC->SetBkMode(OPAQUE);

	DWORD part = BP_PUSHBUTTON;

	BOOL bIsThemed = IsThemed(m_hTheme);

	if (bIsThemed)
	{
		DWORD state = m_bPressed ? PBS_PRESSED : PBS_NORMAL;

		if (state == PBS_NORMAL)
		{
			if (!m_bEnabled)
				state = PBS_DISABLED;
			if (m_bMouseOver)
				state = PBS_HOT;
		}
		ThemeHelper.DrawThemeBackground(m_hTheme, pDC->m_hDC, part, state, &rectButton, NULL);
	}
	else
	{
		CBrush brBackground(GetSysColor(COLOR_BTNFACE));

		pDC->FillRect(&rectButton, &brBackground);

		// draw pressed button
		if (m_bPressed)
		{
			CBrush brBtnShadow(GetSysColor(COLOR_BTNSHADOW));
			pDC->FrameRect(&rectButton, &brBtnShadow);
		}
		else	// ...else draw non pressed button
		{
			UINT uState = DFCS_BUTTONPUSH |
				  (m_bMouseOver ? DFCS_HOT : 0) |
				  ((m_bPressed) ? DFCS_PUSHED : 0);

			pDC->DrawFrameControl(&rectButton, DFC_BUTTON, uState);
		}
	}

	BOOL bHasText = !m_strText.IsEmpty();

	UINT uTextAlignment = DT_CENTER | DT_SINGLELINE | DT_VCENTER | DT_WORDBREAK;

	// write the button title (if any)
	if (bHasText)
	{
		// draw the button's title -
		// if button is pressed then "press" title also
		if (m_bPressed && !bIsThemed)
			rectButton.OffsetRect(1, 1);

		if (bIsThemed)
		{
			ThemeHelper.DrawThemeText(m_hTheme, pDC->m_hDC, part, m_bEnabled ? PBS_NORMAL : PBS_DISABLED,
							m_strText, uTextAlignment, 0, &rectButton);
		}
		else
		{
			pDC->SetBkMode(TRANSPARENT);

			if (!m_bEnabled)
			{
				rectButton.OffsetRect(1, 1);
				pDC->SetTextColor(::GetSysColor(COLOR_3DHILIGHT));
				pDC->DrawText(m_strText, -1, &rectButton, uTextAlignment);
				rectButton.OffsetRect(-1, -1);
				pDC->SetTextColor(::GetSysColor(COLOR_3DSHADOW));
				pDC->DrawText(m_strText, -1, &rectButton, uTextAlignment);
			}
			else
			{
				pDC->SetTextColor(::GetSysColor(COLOR_BTNTEXT));
				pDC->SetBkColor(::GetSysColor(COLOR_BTNFACE));
				pDC->DrawText(m_strText, -1, &rectButton, uTextAlignment);
			}
		}
	}

	if (pOldFont)
		pDC->SelectObject(pOldFont);
}
コード例 #3
0
void CLREnvelopeEditorCtrl::OnDraw(
			CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
	//build memory device context to draw to
	CDC			DrawDC;
	CDC*		pDrawDC=&DrawDC;
	CBitmap		MemoryBitmap;
	CBitmap*	pMemoryBitmap=&MemoryBitmap;
	CBitmap*	pOldBitmap;

	pDrawDC->CreateCompatibleDC(pdc);
	pMemoryBitmap->CreateCompatibleBitmap(pdc,rcBounds.right,rcBounds.bottom);
	pOldBitmap=pDrawDC->SelectObject(pMemoryBitmap);
	//refresh m_RCCtrlArea with valid one
	m_RCCtrlArea=rcBounds;
	m_RCCtrlArea.bottom-=CONTROL_BAR_HEIGHT;
	//clear background
	CBrush	brBackground(TranslateColor(AmbientBackColor()));
	pDrawDC->FillRect(m_RCCtrlArea, &brBackground);
	//draw selected area if present
	if(m_bHasSelection) {
		CBrush		brSelection;
		COLORREF	selection_color=TranslateColor(AmbientBackColor());
		BYTE		r_color,g_color,b_color;
		r_color=GetRValue(selection_color);
		g_color=GetGValue(selection_color);
		b_color=GetBValue(selection_color);
		int sum3=((int)r_color+(int)g_color+(int)b_color)/3;
		if(sum3>30) {
			if(r_color>30) r_color-=30;
			else r_color=0;
			if(g_color>30) g_color-=30;
			else g_color=0;
			if(b_color>30) b_color-=30;
			else b_color=0;
		}
		else {
			if(r_color<225) r_color+=30;
			else r_color=255;
			if(g_color<225) g_color+=30;
			else g_color=255;
			if(b_color<225) b_color+=30;
			else b_color=255;
		}
		selection_color=RGB(r_color,g_color,b_color);
		brSelection.CreateSolidBrush(selection_color);
		CRect selection_rect;
		selection_rect.top=0;
		selection_rect.bottom=m_RCCtrlArea.bottom;
		selection_rect.left=translateEnvelopeXToScreenX(m_lFirstSelectedPosition);
		selection_rect.right=translateEnvelopeXToScreenX(m_lLastSelectedPosition);
		pDrawDC->FillRect(&selection_rect,&brSelection);
	}
	//draw X and Y axes
	CPen	axis_pen;
	axis_pen.CreatePen(PS_SOLID,2,RGB(0,0,0));
	CPen*	old_pen;
	old_pen=pDrawDC->SelectObject(&axis_pen);
	//X
	pDrawDC->MoveTo(0,translateEnvelopeYToScreenY(0.0f));
	pDrawDC->LineTo(m_RCCtrlArea.right,translateEnvelopeYToScreenY(0.0f));
	//Y
	pDrawDC->MoveTo(translateEnvelopeXToScreenX(0),0);
	pDrawDC->LineTo(translateEnvelopeXToScreenX(0),m_RCCtrlArea.bottom);
	//draw grid
	CPen	grid_pen;
	grid_pen.CreatePen(PS_SOLID,1,RGB(0,0,0));
	pDrawDC->SelectObject(&grid_pen);
	//draw control border
	pDrawDC->MoveTo(0,0);
	pDrawDC->LineTo(m_RCCtrlArea.right-1,0);
	pDrawDC->LineTo(m_RCCtrlArea.right-1,m_RCCtrlArea.bottom-1);
	pDrawDC->LineTo(0,m_RCCtrlArea.bottom-1);
	pDrawDC->LineTo(0,0);

	//here grid drawing starts
	long	x_step=calcEnvelopeXStep();
	float	y_step=calcEnvelopeYStep();
	long	x_pos;
	float	y_pos;
	//y
	x_pos=(m_lFirstKeyPosition/x_step+1)*x_step;
	while(x_pos<m_lLastKeyPosition) {
		pDrawDC->MoveTo(translateEnvelopeXToScreenX(x_pos),0);
		pDrawDC->LineTo(translateEnvelopeXToScreenX(x_pos),m_RCCtrlArea.bottom);
		x_pos+=x_step;
	}
	//x
	y_pos=((float)floor(m_fLowValue/y_step)+1.0f)*y_step;
	while(y_pos<m_fHighValue) {
		pDrawDC->MoveTo(0,translateEnvelopeYToScreenY(y_pos));
		pDrawDC->LineTo(m_RCCtrlArea.right,translateEnvelopeYToScreenY(y_pos));
		y_pos+=y_step;
	}

	//draw curve
	CPen	cpEnvelope;
	cpEnvelope.CreatePen(PS_SOLID,2,m_CurveColor);
	pDrawDC->SelectObject(&cpEnvelope);
	x_pos=0;	//beware that now it is screen, not envelope coordinate
	float fEvalRes=m_pEnvelope->evalEnvelope(translateScreenXToSeconds(x_pos));
	pDrawDC->MoveTo(x_pos,translateEnvelopeYToScreenY(fEvalRes));
	while(x_pos<m_RCCtrlArea.right) {
		fEvalRes=m_pEnvelope->evalEnvelope(translateScreenXToSeconds(x_pos));
		pDrawDC->LineTo(x_pos,translateEnvelopeYToScreenY(fEvalRes));
		x_pos++;
	}
	//draw keys
	if(!(m_bDirtyPositions ||
		m_bDirtyValues)) {
		long i;
		long lNumKeys=m_pEnvelope->getNumKeys();
		for(i=0;i<lNumKeys;i++) {
			drawKey(i,pDrawDC);
		}
	}

	//draw bottom bar
	CBrush		white_brush;
	white_brush.CreateSolidBrush(RGB(255,255,255));
	CRect	rcBottom=rcBounds;
	rcBottom.top=rcBounds.bottom-CONTROL_BAR_HEIGHT;
	pDrawDC->FillRect(rcBottom,&white_brush);
	pDrawDC->SelectObject(&grid_pen);

	//draw bottom bar border
	pDrawDC->MoveTo(0,rcBottom.top);
	pDrawDC->LineTo(rcBottom.right-1,rcBottom.top);
	pDrawDC->LineTo(rcBottom.right-1,rcBottom.bottom-1);
	pDrawDC->LineTo(0,rcBottom.bottom-1);
	pDrawDC->LineTo(0,rcBottom.top);

	//draw vertical lines and frame numbers every 10 x_steps in bottom bar
	CFont	cfFrameFont;
	CString	csFrameString;
	cfFrameFont.CreateFont(8,0,0,0,FW_NORMAL,0,0,0,DEFAULT_CHARSET,OUT_DEVICE_PRECIS,
		CLIP_DEFAULT_PRECIS,PROOF_QUALITY,FIXED_PITCH,NULL);
	pDrawDC->SelectObject(&cfFrameFont);
	pDrawDC->SetBkMode(TRANSPARENT);
	x_pos=m_lFirstKeyPosition-m_lFirstKeyPosition%(10*x_step)-10*x_step;
	while(x_pos<m_lLastKeyPosition) {
		if((x_pos%(10*x_step))==0) {
			pDrawDC->MoveTo(translateEnvelopeXToScreenX(x_pos),rcBottom.top);
			pDrawDC->LineTo(translateEnvelopeXToScreenX(x_pos),rcBottom.bottom);
			csFrameString.Format("%d",x_pos);
			pDrawDC->TextOut(translateEnvelopeXToScreenX(x_pos),
				rcBottom.top,csFrameString);
		}
		x_pos+=x_step;
	}
	pDrawDC->SelectObject(old_pen);

	pdc->BitBlt(0,0,rcBounds.right,rcBounds.bottom,pDrawDC,0,0,SRCCOPY);
	
	pDrawDC->SelectObject(pOldBitmap);
	pDrawDC->DeleteDC();
}
コード例 #4
0
ファイル: VisualSynanView.cpp プロジェクト: deNULL/seman
void CVisualSynanView::OnPaint() 
{
	CString S = GetDocument()->m_VisualSentences.m_WorkTimeStr;
	((CFrameWnd*)((CVisualSynanApp*)AfxGetApp())->m_pMainWnd)->SetMessageText(S);
	ASSERT( GetDocument() );


	CClientDC clDC(this);
	CView::OnPaint();

	CRect clientRect;	
	CDC memDC;
	CBitmap bmBmp;
	
	CRect rectDevice;

	//creating memory DC
	GetClientRect(&clientRect);
	rectDevice = clientRect;
	OnPrepareDC(&clDC);
	clDC.DPtoLP(&clientRect);
	bmBmp.CreateCompatibleBitmap(&clDC, rectDevice.right , rectDevice.bottom);
	memDC.CreateCompatibleDC(&clDC);

	CBitmap* pOldBitmap = memDC.SelectObject(&bmBmp);
	CBrush brBackground(::GetSysColor(COLOR_WINDOW));
	memDC.FillRect(&rectDevice, &brBackground);
	memDC.SetBkColor(::GetSysColor(COLOR_WINDOW));

	//selecting choosen font
	CFont* pOldFont;

	if( m_bExistUsefulFont)
	{
		pOldFont = memDC.SelectObject(&m_FontForWords);
	}



	if( m_bFirsTime && !GetDocument()->NoSentences() )
	{
		m_bFirsTime = FALSE;
		GetDocument()->CalculateCoordinates(&memDC,clientRect.right, m_bShowGroups);
	}


	int iOffset = clientRect.top - rectDevice.top;

	//drawing sentences in memory DC
	GetDocument()->PrintSentences(&memDC,clientRect, iOffset);

	//drawing it on the screen
	clDC.BitBlt(0,clientRect.top, rectDevice.right,rectDevice.bottom,&memDC,0,0,SRCCOPY);

	//restoring old bitmap and old font
	memDC.SelectObject(pOldBitmap);
	if( m_bExistUsefulFont)
		memDC.SelectObject(pOldFont);
	memDC.DeleteDC();	
	
	
	ResizeScroll();
}