Окт 16 2009

Сообщения от поля с прокруткой

При нажатии одной из стрелок элемент управления Spin посылает своему родительскому окну сообщение WM_VSCROLL или WM_HSCROLL (в зависимости от ориентации счетчика), в котором младшее слово параметра wParam содержит код SB_THUMBPOSITION. Кроме того, счетчик посылает уведомляющее сообщение UDN_DELTAPOS в форме сообщения WM_N0TIFY.
Обычно в приложении нет необходимости обрабатывать все сообщения. Часто бывает достаточно получить текущую позицию счетчика, обрабатывая сообщение WM_VSCROLL или WM_HSCROLL Это можно сделать, отправив элементу Spin управляющее сообщение UDM_GETPOS.
При непосредственном клавиатурном вводе нового числа в окно редактирования элемент Edit Box посылает родительскому окну сообщение WM_COMMAND с кодом уведомления EN_CHANGE. Если вы хотите, чтобы приложение немедленно отреагировало на изменившуюся текущую позицию счетчика (а он отслеживает все изменения в приятельском окне), то предусмотрите обработку этого сообщения. Пример такой обработки приведен ниже в приложении Spinner.


Окт 16 2009

Создание счетчика

Счетчик можно создать несколькими способами. В первом способе используется вызов функции CreateWindowEx с указанием оконного класса UPDOWN_CLASS. Во втором способе вызывается функция CreateUpDownControl, создающая счетчик и одновременно определяющая его минимальную, максимальную и текущую позиции, а также его приятельское окно.
Третий способ создания счетчика — при помощи редактора диалоговых окон на этапе визуального проектирования формы диалога. Элемент управления Spin выбирается с помощью мыши на панели инструментов Controls и просто помещается в нужное место формы диалога.
Затем надо вызвать окно свойств Spin Properties и на вкладке General в поле ID указать идентификатор элемента управления.


Окт 16 2009

Счетчик и поле с прокруткой

Элемент управления счетчик (Spin) реализован как две кнопки со стрелками, с помощью которых пользователь может увеличивать или уменьшать некоторое числовое значение. Значение, связанное со счетчиком, называется его текущей позицией.
Кроме этого счетчик можно ассоциировать с другим элементом управления, называемым приятельским окном (buddy window). Чаще всего таким окном является окно редактирования. Комбинацию счетчика с окном редактирования называют также полем с прокруткой. Поле с прокруткой воспринимается пользователем как единый элемент управления. Содержимое окна редактирования в таком элементе отображает текущую позицию счетчика Не имея ассоциированного с ним окна, счетчик функционирует как упрощенный вариант полосы прокрутки. Например, в элементе управления Tab control счетчик используется для осуществления доступа к дополнительным вкладкам .


Окт 16 2009

Приложение TrackBar

Для демонстрации применения регуляторов разработаем приложение TrackBar, которое является клоном приложения ModelessDlg, рассмотренного в главе 7. Приложение ModelessDlg позволяло изменять цвет фона окна с помощью полос прокрутки. В нашем новом приложении вместо полос прокрутки будут применены элементы управления Slider.
Создайте новый проект с именем TrackBar. Скопируйте из папки проекта ModelessDlg (см. листинг 7.6) в папку проекта TrackBar файлы ModelessDlg.срр, ModelessDlg.re и resource.h, скорректировав имена первых двух файлов заменой подстроки ModelessDlg на TrackBar. Также скопируйте из папки проекта ToolTip (листинг 8.4) файлы KWndEx.cpp и KWndEx.h. Все скопированные файлы нужно добавить в состав проекта. Также к настройкам проекта на вкладке Link следует добавить библиотеку comctl32.lib.
Откройте вкладку ResourceView в окне Workspace.


Окт 16 2009

Действия пользователя и уведомляющие сообщения

Регулятор уведомляет свое родительское окно о действиях пользователя, посылая сообщение WM_HSCR0LL или WM_VSCR0LL — в зависимости от ориентации элемента управления (Horizontal или Vertical). В любом случае в младшем слове параметра wParam содержится код уведомления, а параметр IParam содержит дескриптор регулятора. Для кодов TB_THUMBP0SITI0N и TBJTHUMBTRACK старшее слово параметра wParam содержит позицию ползунка.


Окт 16 2009

Параметры и состояние регулятора

С элементом управления Slider связан внутренний счетчик, определяющий его поведение. Счетчик имеет минимальное значение wMin и максимальное значение wMax. По умолчанию wMin = 0, a wMax = 100. Вы можете изменить диапазон регулятора, послав ему сообщение TBM_SETRANGE.
Текущее состояние счетчика однозначно связано с текущей позицией ползунка. Пользователь может перемещать ползунок по линейке регулятора как с помощью мыши, так и с помощью клавиатуры. Второй вариант работы предполагает, что регулятор имеет фокус ввода.
Минимальный интервал, на который можно изменить состояние регулятора с помощью клавиш со стрелками, называется «строкой» (line). По умолчанию он равен единице. Размер «строки» можно изменить, послав регулятору сообщение TBM_SETLINESIZE.
Более крупный интервал, на который можно изменить состояние регулятора с помощью клавиши Page Up или Page Down, называется «страницей» (page). По умолчанию размер «страницы» равен одной пятой части диапазона регулятора. Размер «страницы» можно изменить, послав регулятору сообщение TBM_SETPAGESIZE.
Если регулятор создан со стилем Auto ticks (TBS_AUT0TICKS), то линейка имеет метки во всем диапазоне значений с шагом wFreq, который по умолчанию равен единице. Вы можете изменить этот шаг, послав сообщение TBM_SETTICFREQ.


Окт 16 2009

Регулятор

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


Окт 16 2009

Индикатор процесса

Индикатор процесса, или элемент управления Progress bar реализован как дочернее окно, которое может использоваться в приложении для отображения процесса выполнения некоторой длительной операции. Индикатор процесса выглядит как вытянутая и расположенная горизонтально или вертикально прямоугольная область. По мере выполнения операции область заполняется слева направо или снизу вверх небольшими прямоугольниками, что позволяет показать пользователю прогресс в выполнении текущей операции.
Если при вызове функции CreateWindow дополнительно указать стиль PBS_VERTICAL, то индикатор будет иметь вертикальную ориентацию. Термин «ориентация» здесь относится только к способу заполнения окна индикатора прямоугольниками: слева направо или снизу вверх. Форма же окна определяется только параметрами width и height.
Если вы предпочитаете использовать сплошное заполнение окна индикатора процесса, без маленьких промежутков между прямоугольниками, то укажите дополнительно стиль PBS_SM00TH.
Реализация процесса и его связи с индикацией полностью лежат на плечах разработчика приложения. Собственно индикатор является лишь средством отображения отношения двух величин.
Интервал (range) индикатора процесса ассоциируется с полным выполнением операции. Он задается как пара целых чисел wMin и wMax. Текущая позиция {current position) отображает смещение от начала интервала и соответствует степени завершения операции. Оконная процедура индикатора процесса использует интервал и текущую позицию, чтобы определить процент заполнения окна индикатора прямоугольниками.


Окт 16 2009

Приложение StatusBar

Создайте новый проект с именем StatusBar. Скопируйте из папки проекта ToolBar в папку проекта StatusBar файлы ToolBar.cpp, ToolBar.rc и resource.h, скорректировав имена первых двух файлов заменой подстроки ToolBar на StatusBar. Скопируйте также файл toolbarl.bmp. Наконец, скопируйте из папки проекта ToolTip файлы KWndEx.h и KWndEx.cpp.
Добавьте скопированные файлы в состав проекта. К настройкам проекта на вкладке Link нужно добавить библиотеку comctl32.lib.
Теперь откройте вкладку ResourceView в окне Workspace. В списке ресурсов откройте папку String table и вызовите редактор таблицы строк двойным щелчком мыши на элементе String table.


Окт 16 2009

Процедура однозначной идентификации пунктов-подменю

Для пунктов-подменю, принадлежащих меню нулевого уровня, в качестве идентификаторов используются индексы, присваиваемые им Windows, то есть 0, 1, 2 и т. д. Эти значения содержатся в младшем слове параметра wParam сообщения WM_MENUSELECT.
Для пунктов-подменю, принадлежащих некоторому меню первого уровня, уникальный идентификатор формируется на базе индекса itemID, извлекаемого из младшего слова параметра wParam, посредством добавления соответствующего смещения:
itemID += 100 (submenuID + 1);
где submenuID — индекс рассматриваемого подменю в меню нулевого уровня.
Таким образом, для меню первого уровня с нулевым индексом (submenuID=0) входящие в него пункты-подменю получат номера 100, 101, 102 и т. д. Для меню первого уровня с единичным индексом входящие в него пункты-подменю получат номера 200, 201, 202 и т. д. Такие же идентификаторы мы будем использовать и для строк в таблице строк приложения.
Из принятого нами ограничения на количество уровней меню вытекает, что все пункты второго (последнего) уровня являются пунктами-командами и поэтому имеют уникальные идентификаторы.
Получив в результате обработки сообщения WM_MENUSELECT уникальный идентификатор пункта меню itemID, мы можем извлечь из таблицы строк соответствующую символьную строку в текстовый буфер text, а затем отобразить этот текст в строке состояния, которая работает в простом режиме. Это может быть реализовано следующими инструкциями:
SendMessage(hwndStatusBar. SB_SIMPLE, TRUE. 0); LoadString(GetModu1eHand1e(NULL), itemID. text. 200); SendMessage(hwndStatusBar. SB_SETTEXT. 255. (LPARAM)text):
Для демонстрации предложенной технологии разработаем приложение StatusBar, являющееся модификацией приложения Toolbar. В результате доработки к программе будет добавлена строка состояния, работающая в простом и стандартном режимах.


Следующая страница »