Господа, всем привет!
Столкнулся с такой проблемкой. Ситуация следующая, приложение полностью написано на чистом АПИ, необходимо при выводе на экран строки менять для пары слов шрифт...Делаю так:
//в обработчике сообщений
....
case WM_PAINT:
{
hdc = BeginPaint(hWnd, &ps);
RECT rt;
view.WriteFormattedText(hdc, rt);
EndPaint(hWnd, &ps);
ReleaseDC(hWnd, hdc);
}
break;
.....
///далее в функции view.WriteFormattedText(hdc, rt)
while((nLine < m_stView.m_nMaxLinesOnPage/* + m_stView.m_nCurrTopLine*/)
&& (nLine + m_stView.m_nCurrTopLine < m_stView.m_nTotalLines))
{
strLine = m_vecLines[m_stView.m_nCurrTopLine + nLine];
// TextOut(hDC, 0, nLineHeight * nLine, strLine.c_str(), strLine.length());
nRet = PrintText(strLine, hDC, nLineHeight * nLine, nRet, bFlag);
nLine++;
}
//ну и функция PrintText(strLine, hDC, nLineHeight * nLine, nRet, bFlag)
int CMyView::PrintText(string strLine, HDC hDC, int nLine, int nLastCount, BOOL& bFlag)
{
int nBreaks = 0;//nLastCount;
int nPos = 0;
BOOL bSmall = bFlag;
string tmp, str;
char * chToken;
char chDel[] = " ";
if(strLine.empty())
return 0;
chToken = strtok((char *)strLine.c_str(), chDel);
if(strcmp(chToken, strLine.c_str()))
{
while(NULL != chToken)
{
nBreaks++;
str += chToken;
str += ' ';
if(nBreaks == 2)
{
HFONT hFont = SelectFont(hDC, m_stFont.m_hBigFont);
if(hFont == m_stFont.m_hBigFont )
SelectFont(hDC, m_stFont.m_hSmallFont);
TextOut(hDC, 0, nLine, str.c_str(), str.length());
nBreaks = 0;
str = "";
}
chToken = strtok(NULL, chDel);
}
}
else// (nBreaks >= 0 && nBreaks < 2)
{
HFONT hFont = SelectFont(hDC, m_stFont.m_hBigFont);
if(hFont == m_stFont.m_hBigFont )
SelectFont(hDC, m_stFont.m_hSmallFont);
TextOut(hDC, 0, nLine, strLine.c_str(), strLine.length());
}
return 0; // - all is OK
}
Ситуации возникают разные — то вообще текст не выводиться мелким фонтом, то выводиться вся строка. Такое ощущение возникает, что шрифт не успевает меняться. Вот собственно и вся трабла. Жду ваших предложений, господа