Visual C++. Описание стандартных классов
Страница 21.


 
OnParaAlign
void OnParaAlign(WORD wAlign);
Аргументы
"sectiontableheader"wAlign - определяет формат абзаца. Может принимать одно из следующих значений:
"sectiontableheader"PFA_LEFT - абзац выравнивается по левому краю;
"sectiontableheader"PFA_RIGHT - абзац выравнивается по правому краю;
"sectiontableheader"PFA_CENTER - абзац выравнивается по центру.
Описание
Данная функция осуществляет форматирование выделенного абзаца.
SetCharFormat
void SetCharFormat(CHARFORMAT2 cf);
Аргументы
"sectiontableheader"cf - объект структуры CHARFORMAT2, содержащий новые атрибуты форматирования текста по умолчанию.
Описание
Данная функция позволяет установить атрибуты форматирования нового текста в объекте класса CRichEditView. В результате выполнения функции SetCharFormat изменяются только те атрибуты текста, которые определены в переменной dwMask аргумента cf. Хотя в библиотеке MSDN указано, что аргументом данной функции является объект структуры CHARFORMAT, при попытке передачи аргумента данного типа компилятор выдает сообщение о невозможности преобразования объекта структуры CHARFORMAT в объект структуры CHARFORMAT2.
CScrollView
Класс CScrollView реализует все возможности класса CView, дополняя их возможностью прокрутки изображения в окне.
Чтобы реализовать возможности прокрутки изображения в любом классе, производном от класса CView достаточно перегрузить в нем функции обработки сообщений OnHScroll и OnVScroll, однако класс CScrollView позволяет использовать следующие возможности: "sectiontableheader"самостоятельно обрабатывает информацию о размерах окна и его рабочей области, а также о режимах отображения;
"sectiontableheader"автоматически прокручивает изображение в ответ на сообщения, поступающие от полосы прокрутки;
"sectiontableheader"автоматически прокручивает изображение в ответ на сообщения, поступающие от клавиатуры, обычной мыши и от колесика мыши IntelliMouse.
Для обработки сообщений от колесика мыши используются функции OnMouseWheel и OnRegisteredMouseWheel. В классе CScrollView реализация этих функции по умолчанию обеспечивает рекомендованную реакцию на сообщение WM_MOUSEWHEEL.
Чтобы обеспечить в пользовательском классе просмотра возможность автоматической прокрутки окна следует использовать в качестве его базового класса класс CScrollView вместо класса CView. Для определения размера прокручиваемой области в функциях CView::OnInitialUpdate и CView::OnInitialUpdate вызывается функция SetScrollSizes (для определения значений ее аргументов пользователю необходимо написать свой программный код).
Вызов функции SetScrollSizes позволяет установить режим отображения, общий размер прокручиваемой области и шаг вертикальной и горизонтальной прокрутки. Все размеры задаются в логических единицах. Логический размер области представления обычно определяется исходя из информации, хранящейся в документе, но в некоторых случаях используются фиксированные размеры области представления.
Шаг горизонтальной и вертикальной прокрутки задается в логических единицах. По умолчанию, если пользователь щелкает левой кнопкой мыши в полосе прокрутки за пределами бегунка, то представление прокручивается на страницу. Если пользователь щелкает по стрелкам прокрутки, расположенным на концах полосы прокрутки, то представление прокручивается на строку. По умолчанию страница представляет собой 1/10 от общего размера области представления, а строка - 1/10 от размера страницы. Чтобы изменить эти величины следует вызвать функцию SetScrollSizes. Например при установке параметров вертикальной прокрутки текста размер страницы может быть установлен таким образом, чтобы после прокрутки вниз первой строкой нового окна была бы последняя строка старого окна, а размер строки равнялся бы высоте текстовой строки, выведенной с использованием текущего шрифта.
Вместо прокрутки изображения в окне объект класса CScrollView может автоматически масштабировать область представления таким образом, чтобы ее размеры совпадали с размерами рабочей области окна. В этом режиме в окне отсутствуют полосы прокрутки. Чтобы использовать эту возможность нужно вызвать функцию CScrollView::SetScaleToFitSize (можно использовать функцию SetScaleToFitSize или SetScrollSizes, но не обе функции одновременно).
Перед вызовом функции OnDraw пользовательского класса представления объект класса CScrollView автоматически устанавливает начало координат объекта класса CPaintDC, передаваемого в качестве аргумента данной функции. Чтобы установить начало координат в прокручиваемом окне класс CScrollView перегружает функцию CView::OnPrepareDC. Это позволяет автоматически установить начало координат объекта класса CPaintDC передаваемого классом CScrollView своей функции OnDraw. При использовании пользователем объектов класса CClientDC и других подобных объектов классов контекста устройств ему необходимо самому вызывать функцию CScrollView::OnPrepareDC. Перегрузка функции CScrollView::OnPrepareDC позволяет установить перо, цвет фона и другие атрибуты контекста устройств, но в этой функции обязательно должен быть вызван метод базового класса для реализации процедуры масштабирования.
Различают следующие разновидности полос прокрутки:
"sectiontableheader"стандартные полосы прокрутки, имеющие стиль окна, и устанавливаемые стилями WS_HSCROLL и WS_VSCROLL;
"sectiontableheader"полосы прокрутки, добавляемые в главное окно приложения, содержащее данный объект класса представления. В этом случае главное окно приложения само посылает сообщения WM_HSCROLL и WM_VSCROLL активному объекту класса представления;
"sectiontableheader"главное окно приложения передает сообщения прокрутки от объекта класса элемента управления CSplitterWnd активной панели разделенного окна (представлению). Если объект класса CSplitterWnd использует разделяемые полосы прокрутки, то объект класса CScrollView использует эту полосу прокрутки, а не создает новую.
Описание данного класса содержится в файле заголовка afxwin.h.
SetScrollSizes
void SetScrollSizes(int nMapMode, SIZE sizeTotal, const SIZE& sizePage = sizeDefault, const SIZE& sizeLine = sizeDefault);
Аргументы
"sectiontableheader"nMapMode - режим отображения, установленный в данном объекте класса просмотра. Значения, которые может принимать данный аргумент перечислены в таблице П2.6.
Таблица П2.6. Характеристики режимов отображения
Режим отображения Логические единицы Направление по оси Y
MM_TEXT 1 элемент изображения Вниз
MM_HIMETRIC 0.01 мм Вверх
MM_TWIPS 1/1440 дюйма Вверх
MM_HIENGLISH 0.001 дюйма Вверх
MM_LOMETRIC 0.1 мм Вверх
MM_LOENGLISH 0.01 дюйма Вверх

Режим отображенияЛогические единицыНаправление по оси Y
"sectiontableheader"Все эти режимы определены в Windows. Класс CScrollView не использует два стандартных режима: MM_ISOTROPIC и MM_ANISOTROPIC. В библиотеке MFC предусмотрена функция SetScaleToFitSize, производящая масштабирование области представления к размерам рабочей области окна.
"sectiontableheader"sizeTotal - общий размер прокручиваемой области представления. Переменная cx данного объекта структуры SIZE содержит ее размер по горизонтали, а переменная cy - ее размер по вертикали. Размеры определяются в логических единицах. Как переменная cx, так и переменная cy должны иметь значение большее либо равное нулю.
"sectiontableheader"sizePage - шаг перемещения изображения по горизонтали или по вертикали при щелчке левой кнопкой мыши в полосе прокрутки за пределами бегунка. Переменная cx данного объекта структуры SIZE содержит шаг перемещения по горизонтали, а переменная cy - шаг перемещения по вертикали.
"sectiontableheader"sizeLine - шаг перемещения изображения по горизонтали и по вертикали при щелчке левой кнопкой мыши по стрелкам полосы прокрутки. Переменная cx данного объекта структуры SIZE содержит шаг перемещения по горизонтали, а переменная cy - шаг перемещения по вертикали.
Описание
Функция SetScrollSizes вызывается при обновлении окна представления. Обычно она вызывается в функции OnUpdate для настройки параметров прокрутки, например при первом выводе документа на экран или при изменении его размеров. Обычно информация, на основании которой вычисляются размеры области представления, получается из связанного с данным представлением документа. Например, если размер документа возвращается функцией GetMyDocSize, вызов данной функции будет выглядеть следующим образом: SetScrollSizes(nMapMode, GetDocument()->GetMyDocSize()); В противном случае можно использовать фиксированный размер области представления, например: SetScrollSizes(nMapMode, CSize(100, 100)); В данной функции может использоваться любой режим отображения Windows, кроме MM_ISOTROPIC и MM_ANISOTROPIC. При использовании данных стилей вместо функции SetScrollSizes используется функция SetScaleToFitSize.
 
« Предыдущая статья   Следующая статья »