Лабораторная работа № 5. Использование механизма обмена сообщениями для управления окнами




 

Цель: Реализация механизма обмена сообщениями в операционной системе Windows.

Задачи:

1. Изучение теоретического материала по обмену сообщениями для управления окнами.

2. Составление алгоритма программы.

3. Программная реализация.

Ход работы:

1. Ознакомиться со спецификациями функций WinAPI по созданию окон и их стилями, а также по управлению обменом сообщениями.

2. Получить индивидуальный вариант задания у преподавателя.

3. Разработать программу в соответствии с полученным заданием, в которой должны использоваться главные и дочерние окна, различные элементы управления и стили, а также обмен сообщениями.

4. Написать отчет и представить его к защите вместе с исполняемым модулем программы и исходными текстами.

Ход защиты:

1. Продемонстрировать преподавателю программу, использующую механизмы обмена сообщениями для управления окнами.

2. Пояснить программный код разработанного приложения.

 

Программы в ОС Windows управляются сообщениями. Все действия пользователей перехватываются системой и преобразуются в сообщения, направляемые программе, которая владеет окнами, к которым обращены действия пользователя. У каждой программы, состоящей хотя бы из одного потока, есть несколько собственных очередей сообщений: очередь асинхронных сообщений, очередь синхронных сообщений, очередь ответных сообщений и очередь виртуального ввода, куда и направляются все сообщения, касающиеся действий с окнами. В каждой программе есть главный цикл, который состоит из получения следующего сообщения и его обработки с помощью внутренней процедуры, соответствующей данному типу сообщений. Иногда некоторые сообщения вызывает эти процедуры, минуя очереди сообщений.

Практически каждая программа в ОС Windows будет содержать код, похожий на следующий.

#include <windows.h>

 

long CALLBACK WndProcedure (HWND Window, UINT Mess, UINT Parametr, long Prm)

{

// обработка сообщений

switch (Mess) {

case WM_PAINT:; return 0; // перерисовка содержимого окна

case WM_CREATE:; return 0; // создание окна

case WM_CLOSE: DestroyWindow (Window); return 0;

// закрытие окна

case WM_DESTROY: PostQuitMessage (0); return 0;

// уничтожение окна

}

return (DefWindowProc (Window, Mess, Parametr, Prm));

// действия по умолчанию

}

 

int WINAPI WinMain (HINSTANCE h, HINSTANCE hprev, char *CmdLine, int CmdShow)

{

WNDCLASS WinClass; // объект окна

MSG Mess; // входящие сообщения

HWND Window; // дескриптор окна

WinClass.lpfnWndProc = WndProcedure;

WinClass.lpszClassName = “Okoshko”;

WinClass.hIcon = LoadIcon (NULL, IDI_APPLICATION);

WinClass.hCursor = LoadCursor (NULL, IDC_ARROW);

// курсор мыши – стрелка

// перерисовка всего окна при изменении высоты и ширины окна

WinClass.Style = CS_HREDRAW | CS_VREDRAW;

// зарегистрировать в системе объект окна

// здесь нет проверки возвращаемого значения

RegisterClass (&WinClass);

// запрос ресурсов для окна

Window = CreateWindow (WinClass.lpszClassName, “Zagolovok okna”,

WS_OVERLAPPEDWINDOW, 0, 0, 600, 400, HWND_DESKTOP, NULL, h,

NULL);

ShowWindow (Window, CmdShow); // отображение окна

UpdateWindow (Window); // перерисовка окна

while (GetMessage (&Mess, NULL, 0, 0)) {

// получение сообщения из очереди

TranslateMessage (&Mess); // трансляция сообщения

DispatchMessage (&Mess);

// сообщение соответствующей процедуре

}

 

return (Mess.wParam);

}

В ОС Windows прежде чем создавать окно, его нужно зарегистрировать. Регистрацию класса окна и производит функция

ATOM RegisterClass (CONST WNDCLASS *WndClass);

// указатель на структуру с данными класса

 

q WS_BORDER – Создание окна с рамкой.

q WS_CAPTION – Создание окна с заголовком (невозможно использовать одновременно со стилем WS_DLGFRAME).

q WS_CHILDWINDOW – Создание дочернего окна (невозможно использовать одновременно со стилем WS_POPUP).

q WS_CLIPCHILDREN – Исключает область, занятую дочерним окном, при выводе в родительское окно.

q WS_CLIPSIBLINGS – Используется совместно со стилем WS_CHILD для отрисовки в дочернем окне областей, перекрываемых другими окнами.

q WS_DISABLED – Создает окно, которое недоступно.

q WS_DLGFRAME – Создает окно с двойной рамкой, без заголовка.

q WS_GROUP – Позволяет объединять элементы управления в группы.

q WS_HSCROLL – Создает окно с горизонтальной полосой прокрутки.

q WS_MAXIMIZE – Создает окно максимального размера.

q WS_MAXIMIZEBOX – Создает окно с кнопкой развертывания окна.

q WS_ICONIC – Создает первоначально свернутое окно (используется только со стилем WS_OWERLAPPED).

q WS_MINIMIZEBOX – Создает окно с кнопкой свертывания.

q WS_OVERLAPPED – Создает перекрывающееся окно (которое, как правило, имеет заголовок и WS_TILED рамку).

q WS_OVERLAPPEDWINDOW – Создает перекрывающееся окно, имеющее стили WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX, WS_MAXIMIZEBOX.

q WS_POPUP – Создает всплывающее окно (невозможно использовать совместно со стилем WS_CHILD).

q WS_POPUPWINDOW – Создает всплывающее окно, имеющее стили WS_BORDER, WS_POPUP, WS_SYSMENU.

q WS_SYSMENU – Создает окно с кнопкой системного меню (можно использовать только с окнами, имеющими строку заголовка).

q WS_TABSTOP – Определяет элементы управления, переход к которым может быть выполнен по клавише TAB.

q WS_THICKFRAME – Создает окно с рамкой, используемой для изменения

q WS_SIZEBOX – размера окна.

q WS_VISIBLE – Создает первоначально неотображаемое окно.

q WS_VSCROLL – Создает окно с вертикальной полосой прокрутки.

 

Функция CreateWindow используется программой для создания окна, а пример ее использования приводился выше.

HWND CreateWindow (

LPCTSTR ClassName,

// указатель на зарегистрированное имя класса

LPCTSTR WindowName, // указатель на имя окна

DWORD dwStyle, // стиль окна

int x, // горизонтальная позиция окна

int y, // вертикальная позиция окна

int Width, // ширина окна

int Height, // высота окна

HWND WndParent, // дескриптор родительского или окна владельца

HMENU Menu,

// дескриптор меню или идентификатор дочернего окна

HANDLE Instance, // дескриптор экземпляра программы

LPVOID Param); // указатель на данные создания окна

 

Следующие предопределенные классы элементов управления могут быть определены в параметре ClassName:

BUTTON (КНОПКА). Обозначает маленькое прямоугольное дочернее окно, которое представляет собой кнопку и пользователь может щелкать по ней мышью, чтобы включить или отключить ее. Кнопки управления могут использоваться самостоятельно или в группах, и они могут или быть подписаны или появляться без текста. Кнопки управления обычно изменяют свой вид, когда пользователь щелкает мышью по ним.

COMBOBOX (КОМБИНИРОВАННОЕ ОКНО). Обозначает элемент управления, состоящий из окна со списком и поля выбора, похожего на элемент редактирования текста. При использовании этого стиля, прикладная программа должна отображать все время или окно со списком или включать раскрывающийся список. В зависимости от стиля комбинированного окна, пользователь сможет или не сможет редактировать содержание поля выбора. Если окно со списком видимо, вводимые символы внутри поля выбора подсвечивают сначала ввод в окно со списком, который соответствует печатаемым символам. Наоборот, выбор элемента в окне со списком отображает выбранный текст в поле выбора.

EDIT (ОКНО РЕДАКТИРОВАНИЯ). Обозначает прямоугольное дочернее окно, внутри которого пользователь может напечатать с клавиатуры текст. Пользователь выбирает элемент управления и дает ему фокус клавиатуры, щелкая мышью по нему или перемещаясь в него, путем нажатия клавиши ТАБУЛЯЦИИ (TAB). Пользователь может напечатать текст, когда элемент управления редактируемого окна отображает мигающую каретку (caret); используйте мышь, чтобы перемещать курсор, выбирать символы, которые будут заменены, или установите курсор для вставки символов; или используйте (BACKSPACE), чтобы удалять символы. Элементы управления редактируемого окна используют шрифт системы с переменным шагом и показывают на экране символы из символьного набора ANSI. Сообщение WM_SETFONT может также быть послано элементу управления окна редактирования, чтобы изменить заданный по умолчанию шрифт. Элементы управления окна редактирования увеличиваются в соответствии с табуляцией символов стольким количеством пробелов, сколько их требуются, чтобы переместить каретку в следующую позицию табуляции. Позиции табуляции принимаются такими, чтобы быть в каждом восьмом знакоместе.

LISTBOX (ОКНО СО СПИСКОМ). Обозначает список строк символов. Этот элемент управления определяется всякий раз, когда прикладная программа должна представить список наименований, типа имен файлов, из которых пользователь может выбирать. Пользователь может выбрать строку, щелкая мышью по ней. Выбранная строка выделяется, а уведомительное сообщение передается в родительское окно. Чтобы листать списки, которые являются слишком длинными для элемента управления окна, используются вертикальная или горизонтальная линейки прокрутки окна со списком. Окно со списком автоматически скрывает или показывает линейку прокрутки, по мере необходимости.

MDICLIENT. Обозначает рабочее окно МНОГОДОКУМЕНТНОГО ИНТЕРФЕЙСА (MDI). Это окно принимает сообщения, которые управляют дочерними окнами прикладной программы МНОГОДОКУМЕНТАЛЬНОГО ИНТЕРФЕЙСА. Рекомендованный стиль содержит WS_CLIPCHILDREN и WS_CHILD. Чтобы создать рабочее окно MDI, которое позволяет пользователю при появлении листать дочерние окна MDI, определите стили WS_HSCROLL и WS_VSCROLL.

SCROLLBAR (ЛИНЕЙКА ПРОКРУТКИ). Обозначает прямоугольник, который содержит бегунок и имеет стрелки направленные в оба конца.
Линейка прокрутки посылает уведомительное сообщение своему родительскому окну всякий раз, когда пользователь щелкает мышью по элементу управления. В случае необходимости, родительское окно ответственно за модификацию позиции бегунка. Элементы управления линейкой прокрутки имеют тот же самый вид и пользуются функциями, что и линейки прокрутки, используемые в обычных окнах. Однако, в отличие от линеек прокрутки окна, линейки прокрутки элемента управления могут быть установлены для использования где-нибудь в окне, при прокрутке вводимой информации необходимой для окна. Класс линейки прокрутки включает также и элементы управления размером окна. Окно с изменяемыми размерами - это маленький прямоугольник, который пользователь может растягивать, чтобы изменить размер окна.

STATIC (СТАТИЧЕСКИЙ ЭЛЕМЕНТ). Обозначает простое текстовое поле, окно или прямоугольник, используемый для надписей, окно или другие отдельные элементы управления. Статические элементы управления не берут никакой вводимой информации и не обеспечивают никакой выводимой информации.

Win 32 API обеспечивает общие стили окна и определенные классом стили окна. Общие стили окон представляются константами, которые начинаются с префикса WS _; они могут быть объединены оператором | (ИЛИ), чтобы формировать различные типы окон, включая главные окна, диалоговые окна и дочерние окна. Определенные классом стили окна определяют вид и поведение окон, принадлежащих к предопределенным классам элемента управления, таких как окна редактирования и окна списков.

Ниже перечислены стили кнопок (в классе BUTTON), которые могут быть определены в параметре dwStyle:

q BS_ 3 STATE – Создает кнопку, которая является такой же, как окошко для флажка, за исключением того, что поле окна может стать недоступным так же, как это делается при установке флажка ("галочки") проверки (checked) или при отмене его. Используйте недоступное состояние, чтобы показать, что состояние окошка для флажка не определено.

q BS_AUTO 3 STATE – Создает кнопку, которая является таким же переключателем с тремя состояниями, за исключением того, что поле окна изменяет свое состояние, когда пользователь выбирает его. Состояние циклически проходит фазы установки флажка проверки, недоступности и отмены
установки.

q BS_AUTOCHECKBOX – Создает кнопку, которая также является окошком для флажка, за исключением того, что состояние установки флажка проверки автоматически переключается между установленным и не установленным параметром, каждый раз, когда пользователь выбирает эту кнопку.

q BS_AUTORADIOBUTTON – Создает кнопку, которая то же, что и "радио" кнопка, за исключением того, что, когда пользователь выбирает её, Windows автоматически устанавливает состояние кнопки в режим контроля флажка, отметив ее "галочкой" и автоматически устанавливает проверку состояния для всех других кнопок в той же самой группе без проверки флажка.

q BS_CHECKBOX – Создает маленькое, пустое окошко для флажка с текстом. По умолчанию, текст отображается справа от окошка. Чтобы отображать текст слева от окошка, объедините этот флажок со стилем BS_LEFTTEXT (или с эквивалентным стилем BS_RIGHTBUTTON).

q BS_DEFPUSHBUTTON – Создает командную кнопку, которая ведет себя подобно кнопке стиля BS_PUSHBUTTON и к тому же имеет жирную черную рамку. Если кнопка находится в диалоговом окне, пользователь может выбрать кнопку, нажав клавишу ENTER, даже тогда, когда кнопка не имеет фокуса ввода. Этот стиль полезен для предоставления пользователю возможности быстро выбрать наиболее подходящую (заданную по умолчанию) опцию.

q BS_GROUPBOX – Создает прямоугольник, в котором могут быть сгруппированы другие элементы управления. Любой текст, связанный с этим стилем отображается в верхнем левом угле прямоугольника.

q BS_LEFTTEXT – Помещает текст слева от "радио" кнопки или окошечка-переключателя, когда объединен со стилем переключателя или "радио" кнопкой. Тот же самое, что и стиль BS_RIGHTBUTTON.

q BS_OWNERDRAW – Создает кнопку представляемую владельцем. Окно владельца принимает сообщение WM_MEASUREITEM, когда кнопка создана и сообщение WM_DRAWITEM, когда внешний вид кнопки изменился.
Не объединяйте стиль BS_OWNERDRAW с любыми другими стилями кнопки.

q BS_PUSHBUTTON – Создает командную кнопку, которая отправляет сообщение WM_COMMAND окну владельца, когда пользователь выбирает эту кнопку.

q BS_RADIOBUTTON – Создает маленький кружок с текстом. По умолчанию, текст отображается справа от кружка. Чтобы отображать текст слева от кружка, объедините этот флажок со стилем BS_LEFTTEXT (или его эквивалентом - стилем BS_RIGHTBUTTON). Используйте "радио" кнопки для групп связанного, но взаимоисключающего выбора.

q BS_USERBUTTON – Устаревшая, но предусматривающая совместимость с 16-разрядными версиями Windows. Базирующиеся на Win32 прикладные программы должны использовать BS_OWNERDRAW взамен этого параметра.

q BS_BITMAP – Определяет, что кнопка отображает точечный рисунок.

q BS_BOTTOM – Помещает текст внизу прямоугольника кнопки.

q BS_CENTER – Выравнивает текст горизонтально по центру в прямоугольнике кнопки.

q BS_ICON – Определяет, что кнопка отображается как значок.

q BS_LEFT – Выравнивает слева текст в прямоугольнике кнопки. Однако, если кнопка - окошечко-переключатель или "радио" кнопка, которые не имеет стиля BS_RIGHTBUTTON, текст остается выровненным справа от переключателя или радиокнопки.

q BS_MULTILINE – Переносит по словам текст кнопки в дополнительные строки, если текстовая строка слишком длинна, чтобы поместиться в одной строке в прямоугольнике кнопки.

q BS_NOTIFY – Дает возможность кнопке послать уведомительные сообщения BN_DBLCLK, BN_KILLFOCUS и BN_SETFOCUS в её родительское окно. Обратите внимание, что кнопки посылают уведомительное сообщение BN_CLICKED независимо от того, имеет ли она этот стиль.

q BS_PUSHLIKE – Создает кнопку (типа переключателя, переключателя с тремя состояниями или "радио" кнопки) имеющую вид и действующую подобно командной кнопке. Выпуклый вид кнопки, когда она не нажата или не выбрана и притопленый, когда она нажата или выбрана.

q BS_RIGHT – Выровненный справа текст в прямоугольнике кнопки. Однако, если кнопка – окошко для флажка или "радио" кнопка, которая не имеет стиля BS_RIGHTBUTTON, текст выровнен по правому краю справа от окошка для флажка или "радио" кнопки.

q BS_RIGHTBUTTON – Устанавливает кружок "радио" кнопки или квадрат окошка для флажка справа от прямоугольника кнопки. Тот же самый стиль, что и BS_LEFTTEXT.

q BS_TEXT – Определяет, что кнопка отображает текст.

q BS_TOP – Размешает текст вверху прямоугольника кнопки.

q BS_VCENTER – Размещает текст в середине (вертикально) прямоугольника кнопки.

 

Ниже перечислены стили комбинированного окна (в классе COMBOBOX), которые могут быть определены в параметре dwStyle:

q CBS_AUTOHSCROLL – Автоматически прокручивает текст в поле редактирования текста вправо, когда пользователь вводит с клавиатуры символ в конце строки. Если этот стиль не установлен, принимается только текст, который помещается внутри прямоугольной границы поля.

q CBS_DISABLENOSCROLL – В окне со списком показывает вертикальную линейку прокрутки заблокированной, когда поле окна содержит не достаточно элементов для прокрутки. Без этого стиля, линейка прокрутки скрыта, если окно со списком содержит не достаточно элементов.

q CBS_DROPDOWN – Подобен CBS_SIMPLE, за исключением того, что окно со списком не отображается, пока пользователь не выберет значок рядом с полем редактирования текста.

q CBS_DROPDOWNLIST – Подобен CBS_DROPDOWN, за исключением того, что поле редактирования текста заменено статическим текстовым элементом, который отображает текущий выбор в окне со списком.

q CBS_HASSTRINGS – Определяет, что представляемое владельцем комбинированное окно содержит элементы, состоящие из строк. Комбинированное окно поддерживает память и адрес для строк, так что прикладная программа может использовать сообщение CB_GETLBTEXT, чтобы восстановить текст для отдельного элемента.

q CBS_LOWERCASE – Преобразовывает в нижний регистр любые символы верхнего регистра, введенные в поле редактирования текста комбинированного окна.

q CBS_NOINTEGRALHEIGHT – Определяет, что размер комбинированного окна - это точный размер, определенный прикладной программой, когда она создала комбинированное окно. Обычно, Windows устанавливает размеры комбинированного окна так, чтобы оно не отображало элементы частично.

q CBS_OEMCONVERT – Преобразует текст, введенный в поле редактирования текста комбинированного окна. Текст преобразуется из набора символов Windows в набор символов OEM, а затем обратно в набор Windows. Это гарантирует соответствующее символьное преобразование, когда прикладная программа вызывает функцию CharToOem, чтобы преобразовать строку Windows в комбинированном окне в символы OEM. Этот стиль наиболее полезен для комбинированных окон, которые содержат имена файлов и применяются только в комбинированных окнах, созданных со стилем CBS_SIMPLE или CBS_DROPDOWN.

q CBS_OWNERDRAWFIXED – Определяет, что владелец окна со списком ответственен за прорисовку его содержания и что элементы в окне со списком все равной высоты. Окно владельца принимает сообщение WM_MEASUREITEM, когда комбинированное окно создано, а сообщение WM_DRAWITEM, когда внешний вид комбинированного окна изменился.

q CBS_OWNERDRAWVARIABLE – Определяет, что владелец окна со списком ответственен за прорисовку его содержания и что элементы в окне со списком являются переменными по высоте. Окно владельца принимает сообщение WM_MEASUREITEM для каждого элемента комбинированного окна, когда Вы создаете комбинированное окно; окно владельца принимает сообщение WM_DRAWITEM тогда, когда изменился внешний вид комбинированного окна.

q CBS_SIMPLE – Всегда отображать окно со списком. Текущий выбор в окне со списком отображается в поле редактирования текста.

q CBS_SORT – Автоматически сортирует строки, введенные в окно со списком.

q CBS_UPPERCASE – Преобразовывает любые символы нижнего регистра в символы верхнего регистра, введенные в поле редактирования текста комбинированного окна.

 

Ниже перечисленные стили поля редактирования текста (в классе EDIT) могут быть определены в параметре dwStyle:

q ES_AUTOHSCROLL – Автоматически прокручивает текст вправо на 10 символов, когда пользователь напечатает символ в конце строчки. Когда пользователь нажимает клавишу ENTER, управление прокручивает весь текст обратно, чтобы установить нуль.

q ES_AUTOVSCROLL – Автоматически перемещает текст вверх на одну страницу, когда пользователь нажимает клавишу ENTER на последней строчке.

q ES_CENTER – Выравнивает по центру текст в многостроковом поле редактирования текста.

q ES_LEFT – Выравнивание текста слева.

q ES_LOWERCASE – Преобразовывает все символы в нижний регистр, поскольку они печатаются внутри поля редактирования текста.

q ES_MULTILINE – Обозначает многостроковое окно редактирования текста. Значение по умолчанию - одностроковое окно редактирования текста. Когда многостроковое поле редактирования находится в диалоговом окне, заданная по умолчанию ответная реакция на нажим клавиши ENTER должна активизировать кнопку по умолчанию. Чтобы использовать клавишу ENTER для перевода строки, стиль используйте ES_WANTRETURN. Когда многостроковое окно редактирования не в диалоговом окне и определен стиль ES_AUTOVSCROLL, поле редактирования показывает столько строчек, сколько это возможно и прокручивает вертикально, когда пользователь нажимает клавишу ENTER. Если Вы не определяете ES_AUTOVSCROLL, окно редактирования показывает столько строчек, сколько это возможно и подает звуковой сигнал, если пользователь нажимает клавишу ENTER, но больше ни строчки не может отобразиться в окне. Если Вы определяете стиль ES_AUTOHSCROLL, многостроковое окно редактирования автоматически горизонтально прокручивается, когда каретка проходит за правый край элемента управления. Чтобы запустить новую строку, пользователь должен нажать клавишу ENTER. Если Вы не определяете ES_AUTOHSCROLL, элемент управления, когда это необходимо, автоматически переносит без разрыва слова в начало следующей строки. Новая строка образуется и тогда, если пользователь нажимает клавишу ENTER. Размер окна определяет позицию перехода слова на новую строку. Если размер окна изменяется, изменяется позиция перехода на новую строку, а текст восстанавливается. Многостроковое окно редактирования текста может иметь линейки прокрутки. Окно редактирования с линейками прокрутки обрабатывают свои собственные сообщения от линейки прокрутки. Обратите внимание, что окно редактирования без линеек прокрутки, прокручивают текст, как описано в предыдущих параграфах и обрабатывают любые сообщений прокрутки, посланные родительским окном.

q ES_NOHIDESEL – Отрицает заданное по умолчанию поведение для поля редактирования текста. Заданное по умолчанию поведение скрывает выбор, когда элемент управления теряет фокус ввода и инвертирует выбор, когда панель управления принимает фокус ввода. Если Вы определяете ES_NOHIDESEL, выбранный текст инвертируется, даже если панель управления не имеет фокуса.

q ES_NUMBER – Позволяет ввести в поле редактирования только цифры.

q ES_OEMCONVERT – Преобразует текст, введенный в окно редактирования. Текст преобразуется из набора символов Windows - в набор символов OEM, а затем обратно - в набор Windows. Это гарантирует соответствующее символьное преобразование, когда из прикладной программы вызывается функция CharToOem, чтобы преобразовать строку Windows в окне редактирования в символы OEM. Этот стиль наиболее полезен для окон редактирования текста, которые содержат имена файлов.

q ES_PASSWORD – Отображает звездочку (*) вместо каждого символа, введенного с клавиатуры в окно редактирования. Вы можете использовать сообщение EM_SETPASSWORDCHAR, чтобы заменить ею символ, который отображается.

q ES_READONLY – Не допускает пользователя к вводу или редактированию текста в окне редактирования.

q ES_RIGHT – Выравнивает по правому краю текст в многострочном окне редактирования.

q ES_UPPERCASE – Преобразует все символы в символы верхнего регистра, когда они вводятся в окно редактирования.

q ES_WANTRETURN – Определяет, чтобы служебный код возврата каретки был вставлен тогда, когда пользователь нажимает клавишу ENTER при вводе текста в многострочное поле редактирования текста в диалоговом окне. Если Вы не определяете этот стиль, нажимая клавишу ENTER, вы получите тот же самый эффект, словно нажали заданную по умолчанию командную кнопку диалогового окна. Этот стиль не имеет никакого влияния в однострочном окне редактирования.

 

Следующие стили элемента управления окна со списком (в классе LISTBOX) могут быть определены в параметре dwStyle:

q LBS_DISABLENOSCROLL – Показывает заблокированную вертикальную линейку прокрутки в окне со списком, когда поле окна не содержит достаточно элементов для прокрутки. Если Вы не определяете этот стиль, линейка прокрутки скрыта, когда окно со списком не содержит достаточно элементов.

q LBS_EXTENDEDSEL – Позволяет многочисленным элементам быть выбранными, при помощи использования клавиши SHIFT и мыши или специальной комбинации клавиш.

q LBS_HASSTRINGS – Определяет, что окно со списком содержит элементы, состоящие из строк. Окно со списком сохраняет память и адреса строк, так что прикладная программа может использовать сообщение LB_GETTEXT, чтобы восстановить текст для отдельного элемента. По умолчанию, все окна со списком за исключением окон со списком предоставленных владельцем имеют этот стиль. Вы можете создать предоставляемое владельцем окно со списком с ним или без этого стиля.

q LBS_MULTICOLUMN – Определяет многостолбцовое окно со списком, которое прокручивается горизонтально. Сообщение LB_SETCOLUMNWIDTH устанавливает ширину столбцов.

q LBS_MULTIPLESEL – Включает или выключает выбор последовательности символов каждый раз, когда пользователь одним или двойным щелчком мыши активизирует строку символов в окне со списком. Пользователь может выбрать любое число строк.

q LBS_NODATA – Определяет "отсутствие данных" в окне со списком. Этот стиль определяется тогда, когда число элементов в окне со списком может превысить одну тысячу. Окно со списком с "отсутствующими данными" должно иметь также стиль LBS_OWNERDRAWFIXED, но не должно иметь стилей LBS_SORT или LBS_HASSTRINGS. Окно со списком с "отсутствующими данными" имеет сходство с окном со списком предоставляемым владельцем за исключением того, что оно не содержит ни строковых или растровых данных для элемента. Команды "добавить", "вставить" или "удалить" элемент всегда игнорируют любые передаваемые элементы данных; запрос на поиск строки внутри окна всегда терпит неудачу. Windows посылает сообщение WM_DRAWITEM окну владельцу, когда элемент должен быть прорисован. ЭлементID (itemID) член структуры DRAWITEMSTRUCT, переданный с сообщением WM_DRAWITEM, определяет номер строки элемента, который будет прорисован. Окно списка с "отсутствующими данными" не посылает сообщение WM_DELETEITEM.

q LBS_NOINTEGRALHEIGHT – Определяет, что размер окна со списком соответствует размеру, определенному прикладной программой, когда она создавала окно со списком. Обычно, Windows устанавливает величину окна со списком так, чтобы оно не отображало элементы частично.

q LBS_NOREDRAW – Определяет, что вид окна со списком не модифицируется, когда производятся изменения. Вы можете в любое время изменить этот стиль, посылая сообщение WM_SETREDRAW.

q LBS_NOSEL – Определяет, что окно со списком содержит элементы, которые могут просматриваться, но не выбираться.

q LBS_NOTIFY – Сообщает родительскому окну о входящем сообщении всякий раз, когда пользователь щелкает мышью или дважды щелкает по строке в окне списка.

q LBS_OWNERDRAWFIXED – Определяет, что владелец окна со списком ответственен за прорисовку его содержания и что элементы в окне со списком появляются одинаковой высоты. Окно владельца принимает сообщение WM_MEASUREITEM, когда окно со списком создано, а сообщение WM_DRAWITEM, когда внешний вид окна изменился.

q LBS_OWNERDRAWVARIABLE – Определяет, что владелец окна со списком ответственен за прорисовку его содержания и что элементы в окне со списком появляются переменными по высоте. Окно владельца принимает сообщение WM_MEASUREITEM для каждого элемента в окне со списком, когда оно создано, а сообщение WM_DRAWITEM, когда внешний вид окна изменился.

q LBS_SORT – Сортирует строки в окне со списком по алфавиту.

q LBS_STANDARD – Сортирует строки в окне со списком в алфавитном порядке. Родительское окно принимает входящее сообщение всякий раз, когда пользователь щелкает мышью или дважды щелкает по строке. Окно со списком имеет, рамку со всех сторон.

q LBS_USETABSTOPS – Дает возможность окну списка распознавать и развернуть символы в виде таблицы при прорисовке его строк. По умолчанию таблица занимает 32 единицы измерения диалогового окна. Единица измерения диалогового окна - горизонтальное или вертикальное расстояние. Одна горизонтальная единица диалогового окна равна четвертой части текущей единицы измерения габаритов диалогового окна. Windows вычисляет эти единицы измерения, основанные на высоте и ширине шрифта существующей системы. Функция GetDialogBaseUnits возвращает значение текущей базовой единицы измерения диалогового окна в пикселях.

q LBS_WANTKEYBOARDINPUT – Определяет, что владелец окна списка принимает сообщения WM_VKEYTOITEM всякий раз, когда пользователь нажимает клавишу, а окно со списком имеет фокус ввода. Это дает возможность прикладной программе выполнить специальную обработку при вводе с клавиатуры.

 

Следующие стили линейки прокрутки (в классе SCROLLBAR) могут быть определены в dwStyle параметре:

q SBS_BOTTOMALIGN – Выравнивает нижнюю кромку линейки прокрутки с нижней кромкой прямоугольника, определенного параметрами x, y, Width и Height. Линейка прокрутки имеет заданную по умолчанию высоту для системных линеек прокрутки. Используйте этот стиль со стилем SBS_HORZ.

q SBS_HORZ – Обозначает горизонтальную линейку прокрутки. Если стили ни SBS_BOTTOMALIGN, ни SBS_TOPALIGN не определены, линейка прокрутки имеет высоту, ширину и позицию, определенные x, y, Width и Height.

q SBS_LEFTALIGN – Выравнивает левый край линейки прокрутки с левым краем прямоугольника, определенного параметрами x, y, Width и Height. Линейка прокрутки имеет заданную по умолчанию ширину для системных линеек прокрутки. Используйте этот стиль с SBS_VERT стилем.

q SBS_RIGHTALIGN – Выравнивает правый край линейки прокрутки с правым краем прямоугольника, определенного параметрами x, y, Width и Height. Линейка прокрутки имеет заданную по умолчанию ширину для системных линеек прокрутки. Используйте этот стиль с SBS_VERT стилем.

q SBS_SIZEBOX – Обозначает размер окна. Если Вы не определяете ни SBS_SIZEBOXBOTTOMRIGHTALIGN, ни SBS_SIZEBOXTOPLEFTALIGN стиль, размер окна имеет высоту, ширину и позицию, определенную параметрами x, y, Width и Height.

q SBS_SIZEBOXBOTTOMRIGHTALIGN – Выравнивает размер нижнего правого угла окна с нижним правым углом прямоугольника, определенного параметрами x, y, Width и Height. Размер окна имеет заданный по умолчанию размер для системы размера окон. Используйте этот стиль с SBS_SIZEBOX стилем.

q SBS_SIZEBOXTOPLEFTALIGN – Выравнивает размер верхнего левого угла окна с левым верхним углом прямоугольника, определенного параметрами x, y, Width и Height. Размер окна имеет заданный по умолчанию размер для системы размера окон. Используйте этот стиль с SBS_SIZEBOX стилем.

q SBS_SIZEGRIP – Подобен стилю SBS_SIZEBOX, но с выпуклой рамкой.

q SBS_TOPALIGN – Выравнивает верхний край линейки прокрутки с верхним краем прямоугольника, определенного параметрами x, y, Width и Height. Линейка прокрутки имеет заданную по умолчанию высоту для системы линеек прокрутки. Используйте этот стиль с SBS_HORZ стилем.

q SBS_VERT – Обозначает вертикальную линейку прокрутки. Если Вы не определяете ни SBS_RIGHTALIGN, ни SBS_LEFTALIGN стиль, линейка прокрутки имеет высоту, ширину и позицию, определенную параметрами x, y, Width и Height.

 

Следующие стили статического элемента управления (в классе STATIC) могут быть определены в параметре dwStyle. Статический элемент управления может иметь только один из этих стилей:

q SS_BITMAP – Определяет, что в статическом элементе управления должен отобразиться точечный рисунок. Текст кода ошибки - имя точечного рисунка (не имя файла) определенного в другом месте файла ресурса. Стиль игнорирует параметры Width и Height; элемент управления автоматически устанавливает собственные размеры, чтобы поместить точечный рисунок.

q SS_BLACKFRAME – Определяет окно с рамкой, использующей тот же самый цвет, как и у рамки основного окна. Этот цвет черный по умолчанию в системе цветов Windows.

q SS_BLACKRECT – Определяет прямоугольник, заполненный текущим
цветом рамки окна. По умолчанию этот цвет черный в системе цветов Windows.

q SS_CENTER – Определяет простой прямоугольник и выравнивает по центру текст кода ошибки в прямоугольнике. Текст форматируется перед отображением его на экране. Слова, которые выходят за пределы конца строки автоматически переносятся в начало следующей центрированной строки.

q SS_CENTERIMAGE – Определяет, что средняя точка статического элемента управления со стилем SS_BITMAP или SS_ICON должна остаться фиксированной, когда элемент управления изменяется. Четыре стороны корректируются так, чтобы поместить новый точечный рисунок или пиктограмму.
Если статический элемент управления имеет стиль SS_BITMAP, а точечный рисунок меньше чем рабочая область элемента управления, рабочая область заполняется цветом пикселя левого верхнего угла точечного рисунка. Если статический элемент управления имеет стиль SS_ICON, пиктограмма появляется, но не окрашивает рабочую область.

q SS_GRAYFRAME – Определяет поле окна с рамкой, выведенной тем же самым цветом, что и экранный фон (рабочий стол). По умолчанию в системе цветов Windows этот цвет серый.

q SS_GRAYRECT – Определяет прямоугольник, заполненный текущим экранным цветом фона. По умолчанию в системе цветов Windows этот цвет серый.

q SS_ICON – Определяет пиктограмму, отображаемую в диалоговом окне. Данный текст – имя пиктограммы (не имя файла) определенный в другом месте файла ресурса. Стиль игнорирует параметры nWidth и nHeight; пиктограмма автоматически устанавливает свою величину.

q SS_LEFT – Определяет простой прямоугольник и выравнивание по левому краю текста, помещенного в прямоугольнике. Текст форматируется перед его отображением. Слова, которые выходят за пределы конца строки автоматически переносятся в начало следующей выровненной по левой границе
строки.

q SS_LEFTNOWORDWRAP – Определяет простой прямоугольник и выравнивание по левому краю текста, помещенного в прямоугольнике. Планшеты расширяются, но слова не переносятся. Текст, который выходит за пределы конца строки, отсекается.

q SS_METAPICT – Определяет, что изображение метафайла должно отобразиться в статическом элементе управления. Данный текст - имя изображения метафайла (не имя файла) определенный в другом месте в файле ресурса. Статический элемент управления метафайла имеет фиксированный размер; изображение метафайла масштабируется, чтобы приспособить рабочую область статического элемента управления.

q SS_NOPREFIX – Предотвращает интерпретацию любого символа амперсанта (&) в тексте элемента управления как символа префикса акселератора. Они отображаются с удаленным амперсантом и следующим за ним подчеркнутым символом в строке. Этот стиль статического элемента управления может быть включен с любым из определенных статических элементов управления. Прикладная программа может объединять SS_NOPREFIX с другими стилями, используя поразрядный оператор OR = ИЛИ (|). Это может быть полезно, когда имена файлов или другие строки, которые могут содержать амперсанд (&) должны отображаться в статическом элементе управления диалогового окна.

q SS_NOTIFY – Посылает родительскому окну уведомительные сообщения STN_CLICKED и STN_DBLCLK, когда пользователь щелкает или дважды щелкает мышью по элементу управления.

q SS_RIGHT – Определяет



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-11-19 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: