Шаг 923 - CListBox::SetTabStops

void SetTabStops( );
BOOL SetTabStops( const int& cxEachStop );
BOOL SetTabStops( int nTabStops, LPINT rgTabStops );

Возвращаемое значение
Отлично от нуля, если все позиции табуляции были установлены, иначе 0.

Параметры
cxEachStop
Табуляторы установлены в каждых cxEachStop модулях диалога. См. rgTabStops для описания модуля диалога.
nTabStops
Определяет число табуляторов, чтобы иметь в списке.
rgTabStops
Точки к первого члена массива целых чисел, содержащих позицию табуляции устанавливают в модули диалога. Модуль диалога - горизонтальное или вертикальное расстояние. Один горизонтальный модуль диалога равен четвертой части текущего модуля ширины ядра диалога, и один вертикальный модуль диалога равен восьмой части текущего модуля высоты ядра диалога. Модули ядра диалога вычислены основанными на высоте и ширине текущего шрифта системы. Функция GetDialogBaseUnits Windows возвращает текущие модули ядра диалога в пикселях. Табуляторы должны сортироваться в увеличивающемся порядке, обратная сортировка позиции табуляции не позволяется.

Замечания
Устанавливает позиции табуляции в списке.
Чтобы устанавливать табуляторы к заданному по умолчанию размеру 2 модулей диалога, вызовите версию этой функции без параметров. Чтобы устанавливать табуляторы к размеру другому чем 2, вызовите версию с cxEachStop параметром.
Чтобы устанавливать табуляторы к массиву размеров, используйте версию с rgTabStops и nTabStops параметрами. Табулятор будет установлен для каждого значения в rgTabStops, до номера, определенного nTabStops.
Чтобы отвечать на обращение к SetTabStops функции, список, должно быть, был создан с LBS_USETABSTOPS стилем.

Пример

// Указатель на мой список.
extern CListBox* pmyListBox;

// Найдите ширину пикселя самой большой первой подстроки.
CString str;
CSize sz;
int nIndex, dx=0;
CDC* pDC = pmyListBox->GetDC();
for (int i=0;i < pmyListBox->GetCount();i++)
{
	pmyListBox->GetText( i, str );
	if ((nIndex=str.Find('\t')) != -1)
		str = str.Right(nIndex);
	sz = pDC->GetTextExtent(str);
	if (sz.cx > dx)
		dx = sz.cx;
}
pmyListBox->ReleaseDC(pDC);

// Установить табуляторы в каждом как 1/3
// самой большой строки. 
// ОБРАТИТЬ ВНИМАНИЕ: Преобразуйте пиксели в модули диалога.
pmyListBox->SetTabStops((dx*4/3 * 4) / LOWORD(::GetDialogBaseUnits()));

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 11.02.2002