Beginner_mfc Ответов: 1

Раскраска прямоугольника за динамическим текстом cstatic в белый цвет


У меня есть следующий код, который динамически создает CStatic метки.

[Код]
В то время как(i < 5)
CRect textrect(44,y,110,y+5);
CStatic *text = новый CStatic ;
MapDialogRect(&textrect);
text -> Create ( msgs.data(),WS_CHILD | WS_VISIBLE | SS_ LEFT , textrect,this ,0);
[/ Код]

Подскажите пожалуйста как раскрасить прямоугольник за ним в белый цвет

Что я уже пробовал:

Я попробовал ON_WM_CTLCOLORSTATIC
ON_WM_CTLCOLOR,ON_WM_ERASEBKGND но ничего не работает ..если я пытаюсь ON_WM_CTLCOLORSTATIC Ithan весь прямоугольник окрашивается в белый цвет, но чем рисовать текст-это проблема, потому что он создается динамически с помощью create. Пожалуйста, расскажите о каком-нибудь простейшем подходе с фрагментом кода

Richard MacCutchan

Если вы собираетесь обрабатывать сообщения color и erase в отношении рисования элемента управления, то вы также должны обрабатывать сообщение WM_PAINT для добавления текста.

Rick York

Ищите класс на этом сайте под названием CLabel. Это собственник-нарисованный контроль замены для CStatic. С его помощью вы можете установить цвет переднего плана, цвет фона и шрифт текста для использования в элементе управления. Это очень удобно, и я часто им пользуюсь.

Я сам искал тебя : https://www.codeproject.com/Articles/215/Extended-Use-of-CStatic-Class-CLabel-1-6

1 Ответов

Рейтинг:
0

Yofoo

1. ON_WM_CTLCOLOR_REFLECT
2. ON_WM_ERASEBKGND
3. ON_WM_PAINT

пример:

HBRUSH CColorStatic::CtlColor(CDC* pDC, UINT nCtlColor)
{
	pDC->SetBkMode(TRANSPARENT);
	if(m_nPos != -1)
		pDC->SetTextColor(DEF_TEXTCOLOR);
	else
		pDC->SetTextColor(m_TextColor);
	return (HBRUSH)::GetStockObject(NULL_BRUSH);
}

BOOL CColorStatic::OnEraseBkgnd(CDC* pDC)
{
	return TRUE;
}

void CColorStatic::OnPaint()
{
	CRect		Rect;
	CPaintDC	dc(this);
	TCHAR		szText[1024];
	CFont		*pFont, *pOldFont;
	int			w1, w2;

	GetWindowText(szText, sizeof(szText)/sizeof(TCHAR));
	GetClientRect(Rect);

	if(m_nPos == -1)
	{
		dc.FillSolidRect(0, 0, Rect.Width(), Rect.Height(), m_BackColor);
		dc.SetTextColor(m_TextColor);
	}
	else
	{
		w1 = Rect.Width() * m_nPos / m_nPosMax;
		w2 = Rect.Width() - w1;
		dc.FillSolidRect(0, 0, w1, Rect.Height(), m_TextColor);
		dc.FillSolidRect(w1, 0, w2, Rect.Height(), m_BackColor);
		dc.SetTextColor(DEF_TEXTCOLOR);
	}

	dc.SetBkMode(TRANSPARENT);
	pFont = GetFont();
	pOldFont = dc.SelectObject(pFont);
	dc.DrawText(szText, _tcslen(szText), Rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	pOldFont = dc.SelectObject(pOldFont);
}