none
Richedit readonly multiline scroll, el texto se pinta mal RRS feed

  • Pregunta

  • Hola, cuando hago scroll (mediante código), cuando empieza a hacer scroll el texto se pinta mal, si se empieza a mover el scroll se embadurna todo. ¿Qué puede ser?

     

    Un saludo y gracias de antemano.

     

    void CPCEmuUIDlg::log(int lvl, const char *fmt, ...)

    {

    char szLine[1024];

    va_list args;

    va_start(args,fmt);

    vsprintf(szLine, fmt, args);

    va_end(args);

    strcat(szLine, "\r\n");

     

    long nVisible = 0;

    long nInsertionPoint = 0;

    CHARFORMAT cf;

    COLORREF color;

     

    switch (lvl)

    {

    case 0:

    color = RGB(255, 0, 0);

    break;

    case 1:

    color = RGB(220, 220, 0);

    break;

    case 2:

    color = RGB(0, 255, 0);

    break;

    }

     

    cf.cbSize = sizeof(CHARFORMAT);

    cf.dwMask = CFM_COLOR;

    cf.dwEffects = 0;

    cf.crTextColor = color;

     

     

    nInsertionPoint = _reLog.GetWindowTextLength();

    _reLog.SetSel(nInsertionPoint, -1);

     

    _reLog.SetSelectionCharFormat(cf);

     

    _reLog.ReplaceSel(szLine);

     

    nVisible   = GetNumVisibleLines(&_reLog);

     

    if (&_reLog != _reLog.GetFocus())

    {

    _reLog.LineScroll(INT_MAX);

    _reLog.LineScroll(1 - nVisible);

    }

    _reLog.UpdateWindow();

    }

     

    int CPCEmuUIDlg::GetNumVisibleLines(CRichEditCtrl* pCtrl)

    {

    CRect rect;

    long nFirstChar, nLastChar;

    long nFirstLine, nLastLine;

     

    pCtrl->GetClientRect(rect);

     

    nFirstChar = pCtrl->CharFromPos(CPoint(0, 0));

     

    nLastChar = pCtrl->CharFromPos(CPoint(rect.right, rect.bottom));

    if (nLastChar < 0)

    {

    nLastChar = pCtrl->GetTextLength();

    }

     

    nFirstLine = pCtrl->LineFromChar(nFirstChar);

    nLastLine  = pCtrl->LineFromChar(nLastChar);

     

    return (nLastLine - nFirstLine);

    }

    viernes, 23 de septiembre de 2011 10:08

Respuestas