Здравствуйте, AlexLux, Вы писали:
AL>Здравствуйте, visual_wind, Вы писали:
AL>>>Вот такой код наабивает EditBox ОТЛИЧАЮЩИМИСЯ строками. После этого у меня прокрутка текста скроллбаром вызывает его смазывание.
AL>>>AL>>>CString m_sInfoBox = "12345\r\n54321\r\n";
AL>>>int selFirst = 0, selLast = 0;
AL>>>for (UINT i=0; i<100; i++)
AL>>>{
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>>>}
AL>>>
_>>У меня все работает нормально.
_>>Может, приведете подробности создания едита и место, в котором вызывается функция, в которой Вы заполняете едит?
AL>Я использую EditBox c атрибутом ReadOnly, а для восстановления белого цвета использую обработчик
AL>AL>//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AL>HBRUSH CReNamerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
AL>{
AL> HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
AL> // TODO: Change any attributes of the DC here
AL> if (pWnd == &m_InfoBox1)
AL> {
AL> hbr = (HBRUSH)GetStockObject(WHITE_BRUSH);
pDC->>SetBkMode(TRANSPARENT);
AL> }
AL> // TODO: Return a different brush if the default is not desired
AL> return hbr;
AL>}
AL>
Наверное, все работает так, как и должно.
Из MSDN для функции SetBkColor
[msdn]
TRANSPARENT Background is not changed before drawing
[/msdn]
То есть при перерисовке едита его предыдущее содержимое остается и вызывает тот эффект, который Вы описали.
Может, Вам лучше указать, какого эффекта Вы хотели достичь, и мы подумаем над альтернативным способом его достижения?