Счетчик
Счетчик является объектом класса CSpinButtonCtrl. Для обработки событий, связанных с нажатием кнопок счетчика следует добавить обработчик сообщенияUDN_DELTAPOS. Заготовка обработчика, создаваемая мастеромClassWizardимеет вид:
void CSdiDialog::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
Здесь CSdiDialog– класс диалогового окна, созданный вSDI-проекте под именемSdi;NMHDR– структура, содержащая параметры события. Например, полеNMHDR.codeсодержит код, отражающий вид действия: щелчок мышью –NM_CLICK; двойной щелчок –NMDBLCLICKи ряд других.NM_UPDOWN– структура, содержащая изменения в состоянии счетчика. Основными полями этой структуры являются:int iPos– текущее значение счетчика;int iDelta– изменение текущего состояния счетчика (1 или –1).
Для вывода текущего значения счетчика необходимо установить элемент управления, позволяющий выводить информацию, например, текстовое поле. Пусть с текстовым полем связана компонента данных m_editтипаint. Тогда для вывода значения счетчика можно записать в обработчикеOnDeltaposSpin1:
UpdateData(TRUE);
m_edit = pNMUpDown->iPos;
UpdateData(FALSE);
Следует обратить внимание, что при щелчке по верхней стрелке счетчика, его значение уменьшается, а по нижней – увеличивается. Кроме того, по умолчанию нижняя граница счетчика равно 0, а верхняя – 100. Чтобы изменить эти параметры следует использовать функцию SetRange класса CSpinButtonCtrl. Для этого предварительно введем компоненту данныхm_spinклассаCSpinButtonCtrl.Кроме того, с помощью мастераClassWizardдобавим в класс диалогового окна обработчик сообщенияWM_INITDIALOG. Его необходимость обусловлена тем, что границы счетчика обычно определяются один раз. В данном случае мы связывает задание границ счетчика с созданием диалогового окна. В результате обработчик должен иметь вид:
BOOL CSdiDialog::OnInitDialog() {
CDialog::OnInitDialog();
m_spin.SetRange(10,250);
return TRUE;
}
В этом примере нижняя граница равна 10, а верхняя – 250. При этом щелчок по верхней кнопке счетчика будет увеличивать его значение.
Со счетчиком может быть объединено (ассоциировано) текстовое поле или список для вывода значений счетчика. Выше рассмотрен пример, в котором текстовое поле для вывода является независимым от счетчика объектом. При объединении счетчик и поле образуют единое целое. Для того, чтобы ассоциировать тестовое поле со счетчиком необходимо в окне свойств счетчика на вкладке Stylesустановить флажокAuto Buddy, а в спискеAlignmentвыбратьRightилиLeft.
Дополнительным условием объединения является то, что порядковый номер текстового поля в диалоговом окне должен быть на единицу меньше номера счетчика. Увидеть номера элементов в диалоговом окне можно через менюLayout/Tab Order. Если после этой команды прощелкать мышью по элементам управления, их нумерация будет соответствовать порядку выполнения щелчков.
На рис. 1 нумерация элементов соответствует их порядковым номерам. Поэтому счетчик (17) будет ассоциирован со списком (16). Следует обратить внимание на то, что счетчик на рис. 1 может быть расположен в любом месте окна и иметь любую высоту. При объединении он будет автоматически перенесен на список, а его высота будет выровнена по высоте списка. Однако, это происходит только при выполнении программы. На рис. 3 показан результат такого объединения.