Вывод текста в контекст усройства
От: -AdyOS-  
Дата: 18.11.05 07:25
Оценка:
Господа, всем привет!
Столкнулся с такой проблемкой. Ситуация следующая, приложение полностью написано на чистом АПИ, необходимо при выводе на экран строки менять для пары слов шрифт...Делаю так:



//в обработчике сообщений
....
    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
}


Ситуации возникают разные — то вообще текст не выводиться мелким фонтом, то выводиться вся строка. Такое ощущение возникает, что шрифт не успевает меняться. Вот собственно и вся трабла. Жду ваших предложений, господа
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.