int min,max; // переменные для контроля границ прокрутки
CStatic m_static;// контрол переменная CStatic
CString str;// контрол переменная для статика Value
CScrollBar m_scroll;//контрол переменная для для скролла
Scrollbar и StaticText
Я создаю форму, а в ней StaticText. Проблема в том, что выводимый текст не помещается в StaticText по вертикали. Правда, что к StaticText нельзя "прикрепить" Scrollbar? Если нельзя, то как это сделать без StaticText?
Цитата: nuhop
Я создаю форму, а в ней StaticText. Проблема в том, что выводимый текст не помещается в StaticText по вертикали. Правда, что к StaticText нельзя "прикрепить" Scrollbar? Если нельзя, то как это сделать без StaticText?
Да,можно,вот только зачем ? Текстовый статик предназначен в основном для заголовков,а выводить в нем большой текст...Не знаю,по-моему лучше использовать CEdit.Но могу показать для статика.
1.Вытаскиваешь из Toolbox Static,меняешь его ID в Properties на
IDC_STATIC1.
2.Вытаскиваешь оттуда же Horizontal Scroll Bar
2.Добавляешь в класс диалога переменные:
Код:
4.Устанавливаешь обработчик кнопки ОК и добавляешь в класс диалога
ф-ию в Messages OnHScroll.
5.В конструкторе диалога устанавливаешь
Код:
...
min=20;// значение для минимума
max=200;// значение для максимума
...
min=20;// значение для минимума
max=200;// значение для максимума
...
6.В OnInitDialog дописываешь
Код:
...
// Начальная инициализация полосы прокрутки
m_scroll.SetScrollRange(min,max);
...
// Начальная инициализация полосы прокрутки
m_scroll.SetScrollRange(min,max);
...
7.В обработчике кнопки Ок OnBnClickedOk()
Код:
{
str = "111111\r\n222222\r\n333333\r\n4444444\r\n5555555\r\n666666";
UpdateData(false);
}
str = "111111\r\n222222\r\n333333\r\n4444444\r\n5555555\r\n666666";
UpdateData(false);
}
8.В ф-ии OnHScroll
Код:
...::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// Получаем текущую позицию
int cur=pScrollBar->GetScrollPos();
switch(nSBCode){
case SB_LINELEFT:
cur-1>min?cur-=1:cur=min;
break;
case SB_LINERIGHT:
cur+1<max?cur+=1:cur=max;
break;
case SB_THUMBPOSITION:
cur=nPos;
case SB_THUMBTRACK:
cur=nPos;
}
WINDOWPLACEMENT y;
// Определение оконных координат окна
m_static.GetWindowPlacement(&y);
m_static.MoveWindow(y.rcNormalPosition.left,y.rcNormalPosition.top,cur,cur);
pScrollBar->SetScrollPos(cur);
UpdateWindow();
Invalidate();
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
{
// Получаем текущую позицию
int cur=pScrollBar->GetScrollPos();
switch(nSBCode){
case SB_LINELEFT:
cur-1>min?cur-=1:cur=min;
break;
case SB_LINERIGHT:
cur+1<max?cur+=1:cur=max;
break;
case SB_THUMBPOSITION:
cur=nPos;
case SB_THUMBTRACK:
cur=nPos;
}
WINDOWPLACEMENT y;
// Определение оконных координат окна
m_static.GetWindowPlacement(&y);
m_static.MoveWindow(y.rcNormalPosition.left,y.rcNormalPosition.top,cur,cur);
pScrollBar->SetScrollPos(cur);
UpdateWindow();
Invalidate();
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
Спасибо. Я попробовал также и с CEdit - действительно проще получается. Забавно, что перевод строки будет работать с "\r\n" и никак иначе.