ЛЕКЦИЯ 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).
Ссылка на скачивание - внизу страницы.