powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / DrawText
4 сообщений из 4, страница 1 из 1
DrawText
    #33789584
DrawText
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Visual C++ 6.0, WinXP’2003

Вывожу строку в прямоугольник
pDC->DrawText(strText8, rect8, DT_LEFT|DT_WORDBREAK|DT_CALCRECT);
Как перенести на 2-ую строку, если не вмещается
в прямогольнике, если ДА, то какой формат надо добавить?
DT_CALCRECT - после использования в прямоугольнике ПУСТО

pDC->DrawText(strText8, rect8, DT_LEFT|DT_CALCRECT); // вычисляет , ПУСТО выводит

int m_nHeight8 = pDC->DrawText(strText8, rect8, DT_LEFT|DT_CALCRECT); // вычисляет , ПУСТО выводит
m_sTemp.Format("8.1 HEIGHT of strinh = %d",m_nHeight8); // determines 24, действительно
// в шрифте font2 я задал height of font2 = 24
MessageBox(m_sTemp);

СПАСИБО.
...
Рейтинг: 0 / 0
DrawText
    #33789590
DrawText2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Visual C++ 6.0, WinXP’2003

Вывожу строку в прямоугольник строку
первый символ строки выводится поверх
левой стороны прямоугольника. Ставлю в строке
лидирующий пробел - не помогает.
Выводить отдельно один или 3 пробела такого же цвета,
как стороны прямоугольника - НЕ УМНО.
Какое решение?

СПАСИБО
...
Рейтинг: 0 / 0
DrawText
    #33789677
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msdn
DT_CALCRECT Determines the width and height of the rectangle. If there are multiple lines of text, DrawText uses the width of the rectangle pointed to by the lpRect parameter and extends the base of the rectangle to bound the last line of text. If there is only one line of text, DrawText modifies the right side of the rectangle so that it bounds the last character in the line. In either case, DrawText returns the height of the formatted text but does not draw the text .
...
Рейтинг: 0 / 0
DrawText
    #33790963
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DrawText2...Вывожу строку в прямоугольник строку
первый символ строки выводится поверх
левой стороны прямоугольника. Ставлю в строке
лидирующий пробел - не помогает.
Выводить отдельно один или 3 пробела такого же цвета,
как стороны прямоугольника - НЕ УМНО.
Какое решение?...

как одно из решений - воспользоваться регионом. заказать регион нужно с учётом толщины Ващей рамки на отрисовки. Примеры есть в литературе - заштриховка региона и прочее...

а второй вариант - вроде как у дро текста был регион отрисовки прям ? или ошибаюсь ? Типа того (возможно избыточно - но думаю разберётесь)...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
void CBaseProductionView::DrawPageText(CDC* pDC, CPage* pPage)
{
	static const int c_nFontPointHeight =  8 ;
	// 4 text lines + half of text height between lines
	static const int c_nMaxTextHeight = ((c_nFontPointHeight +  1 ) *  4 ) *  3  /  2 ;
	//CRect rectOut;
	CFont font;
	// Create font
	LOGFONT lf;
	pDC->SetBkMode(TRANSPARENT);
	memset(&lf,  0 , sizeof(LOGFONT));
	lf.lfHeight = -MulDiv(c_nFontPointHeight, pDC->GetDeviceCaps(LOGPIXELSY),  72 );
	//lf.lfWeight = FW_BLACK;
	//lf.lfWeight = FW_BOLD;
	lf.lfCharSet = DEFAULT_CHARSET;
	//lf.lfCharSet = ANSI_CHARSET;
	lf.lfOutPrecision = OUT_DEFAULT_PRECIS;
	lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
	lf.lfQuality = DEFAULT_QUALITY;
	lf.lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS;
	//strncpy(lf.lfFaceName, "Ms Sans Serif", LF_FACESIZE);
	//font.DeleteObject();
	font.CreateFontIndirect(&lf);
	CFont* pOrigFont = pDC->SelectObject(&font);
	//TRACE("Name==%s==\n", pPage->m_strName);
	CString strOut = pPage->m_strName;
	if(!pPage->m_strStatus.IsEmpty())
	{
		if(!strOut.IsEmpty())
			strOut += _T("\n");
		strOut += pPage->m_strStatus;
	}
	if(!pPage->m_strOpen.IsEmpty())
	{
		if(!strOut.IsEmpty())
			strOut += _T("\n");
		strOut += pPage->m_strOpen;
	}
	if(!pPage->m_blTextRect)
	{
		// We need to calculate m_rectText and m_rectTextWithRect
		pPage->m_rectText.left = pPage->m_rect.left + c_nTextRectDiff -
									c_nPenThickness +  1 ;
		pPage->m_rectText.right = pPage->m_nMaxCalcWidth - c_nTextRectDiff;
		pPage->m_rectText.top = pPage->m_rect.bottom + c_nTextRectDiff +
									c_nPenThickness -  1  + c_nTextRectYOffSet;
		pPage->m_rectText.bottom = pPage->m_rectText.top + c_nMaxTextHeight;
		CString strCalc = strOut.IsEmpty() ? _T("   ") : strOut;
		// Calculating size
		CRect rectTemp = pPage->m_rectText;
		pDC->DrawText(strCalc, &rectTemp,
					  DT_WORD_ELLIPSIS | DT_END_ELLIPSIS | DT_CALCRECT | DT_WORDBREAK);
		if(pPage->m_rectText.right > rectTemp.right)
			pPage->m_rectText.right = rectTemp.right;
		if(pPage->m_rectText.bottom > rectTemp.bottom)
			pPage->m_rectText.bottom = rectTemp.bottom;
		pPage->m_rectTextWithRect = pPage->m_rectText;
		pPage->m_rectTextWithRect.InflateRect(c_nTextRectDiff, c_nTextRectDiff);
		pPage->m_blTextRect = TRUE;
	}
	// If page is selected
	CSelPage pageInfo;
	BOOL blTextColorChanged = FALSE;
	COLORREF colTextOld;
	COLORREF colBkOld;
	BOOL blSel = m_mapSelPage.Lookup((long&)pPage->m_sysid, pageInfo);
	if(blSel || pPage == GetCurrentPage())
	{
		if(blSel)
		{
			// Draw blue rect
			COLORREF col = ::GetSysColor(COLOR_HIGHLIGHT);
			CBrush	brushNew(col);
			pDC->FillRect(&pPage->m_rectTextWithRect, &brushNew);
			// Set color for Text
			colBkOld = pDC->SetBkColor(col);
			colTextOld = pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
			blTextColorChanged = TRUE;
		}
		if(pPage == GetCurrentPage())
			pDC->DrawFocusRect(&pPage->m_rectTextWithRect);
	}
	if(!strOut.IsEmpty())
	{
		// Draw text
		pDC->DrawText(strOut, &pPage->m_rectText,
					  DT_WORD_ELLIPSIS | DT_END_ELLIPSIS | DT_WORDBREAK);
	}
	if(blTextColorChanged)
	{
		pDC->SetBkColor(colBkOld);
		pDC->SetTextColor(colTextOld);
	}
	pDC->SelectObject(pOrigFont);
	font.DeleteObject();
}


с уважением
(круглый)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / DrawText
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]