Использование элемента SPIN

Страницы работы

14 страниц (Word-файл)

Содержание работы

ЛЕКЦИЯ 4

  1. Использование элемента SPIN

Сначала создадим на форме обычное поле редактирования

Затем наложим на его правый край элемент SPIN.

Вообще-то местоположение этого элемента и его размер особого значения не имеет, присоединение его к полю редактирования происходит программным путем.

Правда для этого должен быть установлен флажок Set buddy integer

Orientation

Ориентация спина (вертикальная или горизонтальная)

Aligment

Выравнивание спина относительно приятельского окна

Auto buddy

Автоматическая привязка к приятельскому окну

Set buddy integer

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

No thousands

Не отображать запятую для разделения разрядов в числах приятельского окна

Wrap

При достижении максимальной позиции отсчет начинается сначала

Arrow keys

Разрешается использование клавиатуры для изменения спина

Hot track

Для того, чтобы СПИН (и все рассматриваемые далее элементы управления формы) работали корректно в Win 32 API, следует подключить дополнительную библиотеку comctl32.lib и файл описания commctrl.h:

 


2. Дополнительные строки текста программы для управления СПИНОМ (отмечены жирным шрифтом):

#include <windows.h>

#include <stdlib.h>

#include <stdio.h>

#include <commctrl.h>

#include "resource.h"

#define TEST_WM_001   102

HINSTANCE       ghInstance;

HWND    hList1,  hCombo1, hScroll, hSpin;

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

switch (wMsg)

{

// сообщение об инициализации диалоговой формы

case WM_INITDIALOG:

//функция инициализации элементов управления на форме. Нужна для правильного

//запуска формы, на которой расположены СПИН и все далее рассматриваемые элементы

InitCommonControls();

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

//Инициализация спина

//подключена библиотека comctl32.lib и файл описания commctrl.h

//получить указатель на СПИН

hSpin = GetDlgItem (hWnd, IDC_SPIN1);

//получить указатель на приятельское поле

hList1 = GetDlgItem (hWnd,IDC_EDIT1);

//связать СПИН и приятельское поле

SendMessage(hSpin, UDM_SETBUDDY, (WPARAM)hList1, 0);

//установить диапазон работы СПИНА от 0 до 100

//используется макрос MAKELONG( ) для заполнения старшего и младшего

//слова последнего параметра функции

SendMessage(hSpin, UDM_SETRANGE, 0, MAKELONG(0,100));

//уставить начальное значение спина в 50

SendMessage(hSpin,UDM_SETPOS,0,50);

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

break;

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

}

 После компиляции и запуска программы внешний вид спина соответствует рисунку:

  1. Пример получения данных от СПИНА

Для примера данные получим через нажатие дополнительной кнопки. Для чего создадим ее сначала на форме и сделаем на ней надпись «Спин».

Заодно познакомимся со свойствами элемента КНОПКА:

Default button

Кнопка со стилем «по умолчанию»

Owner draw

За прорисовку кнопки отвечает программа

Icon

Внутри кнопки (или рядом) отображается иконка

Bitmap

Внутри кнопки (или рядом) отображается рисунок

Multiline

При необходимости текст в кнопке разбивается на строки

Notify

Разрешает посылку родительскому окну сообщений BN_DBLCLK, BN_KILLFOCUS, BN_SETFOCUS

Flat

Не добавляется имитация трехмерности кнопки

Horizontal alignment

Тип горизонтального выравнивания текста в прямоугольнике, выделенного для кнопки

Vertical alignment

Тип вертикального выравнивания текста в прямоугольнике, выделенного для кнопки

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

case WM_COMMAND:

//ОБРАБОТКА СООБЩЕНИЙ ОТ ЭЛЕМЕНТОВ ДИАЛОГОВОГО ОКНА

switch (LOWORD (wParam))

{

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

                                               case IDC_BUTTON1:

//Для управления кнопкой используются сообщения BM_

//берем хендел  спина

                                   hList1 = GetDlgItem (hWnd, IDC_SPIN1);

//получаем из него данные по текущей позиции

ListIndex= SendMessage (hList1, UDM_GETPOS , 0, 0);

//выводим полученные данные на экран

                                   sprintf(szListText,"spin= %d",ListIndex);

                                   MessageBox(hWnd, szListText, "ЗНАЧЕНИЕ  СПИНА", MB_OK );

                                               break;

  1. РАБОТА С ТРЕКБАРОМ (СЛАЙДЕРОМ)

Создадим СЛАЙДЕР на форме:

 


Orientation

Ориентация слайдера (вертикальная, горизонтальная)

Point

Вид движка (с указателем влево, вправо, без указателя)

Tick marks

Наличие маркировочных рисок

Auto ticks

Авторазметка рисок

Border

Наличие ограничивающей рамки

Enable selection

Включение линейки выбора

Пишем дополнительные строки программы управления слайдером.

switch (wMsg)

{

case WM_INITDIALOG:

// Инициализация слайдера (сообщения TBM_ смотри в MSDN)

//получить указатель на слайдер

hSlider = GetDlgItem (hWnd, IDC_SLIDER1);

//установить диапазон работы слайдера от 0 до 10

Похожие материалы

Информация о работе