Re[4]: Глюк VScroll в CEdit
От: AlexLux  
Дата: 18.11.04 13:26
Оценка:
Здравствуйте, visual_wind, Вы писали:

_>Здравствуйте, AlexLux, Вы писали:


AL>>Здравствуйте, SchweinDeBurg, Вы писали:


SDB>>>Здравствуйте, AlexLux, Вы писали:


AL>>>>У меня в EditBoxe`е не работает вертикальный скролл! При прокрутке текста вновь появляемые строки накладываются на строки в окне, в результате текст смазывается. Как это можно исправить?


SDB>>>А на код можно взглянуть?


AL>>Вот текст функции, добавляющей строки в EditBox:


AL>>
AL>>//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AL>>LRESULT CReNamerDlg::OnDsplReslt(WPARAM wParam, LPARAM lParam)
AL>>{

AL>>    CString sNCount = "";
    
AL>>    sNCount.Format("%u", m_FileProc.m_uReplCntr);
AL>>    m_sInfoBox = m_FileProc.m_sCrntFilePath + 
AL>>                    " - " + sNCount + " replaces;\r\n";
    
AL>>    int selFirst = 0, selLast = 0;
    
AL>>    m_InfoBox1.SendMessage(EM_GETSEL, (WPARAM)&selFirst, (LPARAM)&selLast);
    
AL>>    if (selFirst == selLast)
AL>>    {
AL>>        selFirst = selLast = m_InfoBox1.GetWindowTextLength();
AL>>    }        
AL>>    m_InfoBox1.SendMessage(EM_SETSEL, selFirst, selLast);
AL>>    m_InfoBox1.SendMessage(EM_REPLACESEL, TRUE, (LONG)(LPCSTR)m_sInfoBox);
    
AL>>    return 1;
AL>>}

AL>>


_>Вот такой код у меня работает:



_>
_>    CString m_sInfoBox = "12345\r\n";
    
_>    int selFirst = 0, selLast = 0;
    
_>    m_InfoBox1.SendMessage(EM_GETSEL, (WPARAM)&selFirst, (LPARAM)&selLast);
    
_>    if (selFirst == selLast)
_>    {
_>        selFirst = selLast = m_InfoBox1.GetWindowTextLength();
_>    }        
_>    m_InfoBox1.SendMessage(EM_SETSEL, selFirst, selLast);
_>    m_InfoBox1.SendMessage(EM_REPLACESEL, TRUE, (LONG)(LPCSTR)m_sInfoBox);
_>


_>m_InfoBox1 я объявил как CEdit в хэдере и в OnInitDialog вызвал CEdit.Attach к окну на форме, у которого выставлены свойства Visible, TabStop, Multiline, VerticalScroll.


А ты попробуй

CString m_sInfoBox = "12345\r\n54321\r\n";
    
    int selFirst = 0, selLast = 0;
    
    m_InfoBox1.SendMessage(EM_GETSEL, (WPARAM)&selFirst, (LPARAM)&selLast);
    
    if (selFirst == selLast)
    {
        selFirst = selLast = m_InfoBox1.GetWindowTextLength();
    }        
    m_InfoBox1.SendMessage(EM_SETSEL, selFirst, selLast);
    m_InfoBox1.SendMessage(EM_REPLACESEL, TRUE, (LONG)(LPCSTR)m_sInfoBox);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.