У меня в EditBoxe`е не работает вертикальный скролл! При прокрутке текста вновь появляемые строки накладываются на строки в окне, в результате текст смазывается. Как это можно исправить?
Здравствуйте, AlexLux, Вы писали:
AL>У меня в EditBoxe`е не работает вертикальный скролл! При прокрутке текста вновь появляемые строки накладываются на строки в окне, в результате текст смазывается. Как это можно исправить?
А на код можно взглянуть?
[ posted via RSDN@Home 1.1.4 beta 3 r231, accompanied by Motorhead — Devils ]
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Здравствуйте, AlexLux, Вы писали:
AL>>У меня в EditBoxe`е не работает вертикальный скролл! При прокрутке текста вновь появляемые строки накладываются на строки в окне, в результате текст смазывается. Как это можно исправить?
SDB>А на код можно взглянуть?
Здравствуйте, AlexLux, Вы писали:
AL>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>Здравствуйте, AlexLux, Вы писали:
AL>>>У меня в EditBoxe`е не работает вертикальный скролл! При прокрутке текста вновь появляемые строки накладываются на строки в окне, в результате текст смазывается. Как это можно исправить?
SDB>>А на код можно взглянуть?
AL>Вот текст функции, добавляющей строки в EditBox:
AL>
m_InfoBox1 я объявил как CEdit в хэдере и в OnInitDialog вызвал CEdit.Attach к окну на форме, у которого выставлены свойства Visible, TabStop, Multiline, VerticalScroll.
Здравствуйте, visual_wind, Вы писали:
_>Здравствуйте, AlexLux, Вы писали:
AL>>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>>Здравствуйте, AlexLux, Вы писали:
AL>>>>У меня в EditBoxe`е не работает вертикальный скролл! При прокрутке текста вновь появляемые строки накладываются на строки в окне, в результате текст смазывается. Как это можно исправить?
SDB>>>А на код можно взглянуть?
AL>>Вот текст функции, добавляющей строки в EditBox:
AL>>
_>m_InfoBox1 я объявил как CEdit в хэдере и в OnInitDialog вызвал CEdit.Attach к окну на форме, у которого выставлены свойства Visible, TabStop, Multiline, VerticalScroll.
_>>m_InfoBox1 я объявил как CEdit в хэдере и в OnInitDialog вызвал CEdit.Attach к окну на форме, у которого выставлены свойства Visible, TabStop, Multiline, VerticalScroll.
AL>А ты попробуй
AL>
_>>Попробовал, работает.
_>>Может, Вам лучше привести более обширный кусок кода?
AL>Вот такой код наабивает EditBox ОТЛИЧАЮЩИМИСЯ строками. После этого у меня прокрутка текста скроллбаром вызывает его смазывание. AL>
Здравствуйте, visual_wind, Вы писали:
AL>>Вот такой код наабивает EditBox ОТЛИЧАЮЩИМИСЯ строками. После этого у меня прокрутка текста скроллбаром вызывает его смазывание. AL>>
_>У меня все работает нормально. _>Может, приведете подробности создания едита и место, в котором вызывается функция, в которой Вы заполняете едит?
Я использую EditBox c атрибутом ReadOnly, а для восстановления белого цвета использую обработчик
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
HBRUSH CReNamerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC hereif (pWnd == &m_InfoBox1)
{
hbr = (HBRUSH)GetStockObject(WHITE_BRUSH);
pDC->SetBkMode(TRANSPARENT);
}
// TODO: Return a different brush if the default is not desiredreturn hbr;
}
Здравствуйте, AlexLux, Вы писали:
AL>Здравствуйте, visual_wind, Вы писали:
AL>>>Вот такой код наабивает EditBox ОТЛИЧАЮЩИМИСЯ строками. После этого у меня прокрутка текста скроллбаром вызывает его смазывание. 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]
То есть при перерисовке едита его предыдущее содержимое остается и вызывает тот эффект, который Вы описали.
Может, Вам лучше указать, какого эффекта Вы хотели достичь, и мы подумаем над альтернативным способом его достижения?
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]
_>То есть при перерисовке едита его предыдущее содержимое остается и вызывает тот эффект, который Вы описали.
_>Может, Вам лучше указать, какого эффекта Вы хотели достичь, и мы подумаем над альтернативным способом его достижения?
Hello!
Ура, Заработало! Спасибо за консалт. Я убрал из обработчика OnCtlColor вызов
SetBkMode(TRANSPARENT). Вот новый вариант OnCtlColor:
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
HBRUSH CReNamerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC hereif (pWnd == &m_InfoBox1)
{
pDC->SetTextColor(0));
pDC->SetBkColor(RGB(255,255,255));
hbr = (HBRUSH)GetStockObject(WHITE_BRUSH);
}
// TODO: Return a different brush if the default is not desiredreturn hbr;
}