ЛЕКЦИЯ 4
Сначала создадим на форме обычное поле редактирования


Затем наложим на его правый край элемент 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;
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
}

 После компиляции и запуска
программы внешний вид спина соответствует рисунку:
Для примера данные получим
через нажатие дополнительной кнопки. Для чего создадим ее сначала на форме и
сделаем на ней надпись «Спин».
Заодно познакомимся со свойствами элемента КНОПКА:

| 
   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;

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

| 
   Orientation  | 
  
   Ориентация слайдера (вертикальная, горизонтальная)  | 
 
| 
   Point  | 
  
   Вид движка (с указателем влево, вправо, без указателя)  | 
 
| 
   Tick marks  | 
  
   Наличие маркировочных рисок  | 
 
| 
   Auto ticks  | 
  
   Авторазметка рисок  | 
 
| 
   Border  | 
  
   Наличие ограничивающей рамки  | 
 
| 
   Enable selection  | 
  
   Включение линейки выбора  | 
 

Пишем дополнительные строки программы управления слайдером.
switch (wMsg)
{
case WM_INITDIALOG:
// Инициализация слайдера (сообщения TBM_ смотри в MSDN)
//получить указатель на слайдер
hSlider = GetDlgItem (hWnd, IDC_SLIDER1);
//установить диапазон работы слайдера от 0 до 10
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.