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

SendMessage (hSlider, TBM_SETRANGE, TRUE, MAKELONG(0,10));

//установить движок в начальную позицию 5

SendMessage (hSlider, TBM_SETPOS, TRUE, 5);

//Обработка сообщений от вертикальной полосы прокрутки, вертикального тредбара

//он посылает сообщение WM_VSCROLL, но при этом в LPARAM находится его хендел

//кроме того СПИН тоже посылает аналогичное сообщение, но со своим хенделом

//поэтому в примере продемонстрирована разделение сообщений сразу от линейки

//прокрутки, спина и слайдера

//список извещений от слайдера: TB_ смотри в MSDN

//СПИН извещений не имеет:

case WM_VSCROLL:

if (lParam == (LPARAM)hSlider || lParam == (LPARAM)hSpin)

                                                           switch (LOWORD(wParam))

                                                           {

case TB_PAGEUP:  MessageBox(hWnd, "SLAIDER", "TRECBAR", MB_OK );   break;

                                                           }

                                    else {

switch (LOWORD(wParam))

{

case SB_PAGEUP: nTekV=max(0, nTekV-10); break;

case SB_LINEUP: nTekV=max(0, nTekV-1); break;

case SB_PAGEDOWN: nTekV=min(100, nTekV+10); break;

case SB_LINEDOWN: nTekV=min(100, nTekV+1); break;

case SB_THUMBPOSITION:

case SB_THUMBTRACK: nTekV=HIWORD(wParam); break;

}

SetScrollPos((HWND)lParam,SB_CTL,nTekV,TRUE);

                                          }

break;

//Для демонстрации получения данных от слайдера сделаем еще одну кнопку на форме

//с надписью СЛАЙДЕР и к ней присоединим следующий программный код:

case WM_COMMAND:

//обработка сообщений от элементов диалогового окна

switch (LOWORD (wParam))

{

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

                                               case IDC_BUTTON2:

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

//получаем данные СЛАЙДЕРА

                        ListIndex= SendMessage (hSlider, TBM_GETPOS , 0, 0);

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

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

                                               break;

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

}

  1. Работа с линейкой ПРОГРЕСС

Создадим новый элемент на форме – вертикальную линейку прогресса:

 


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

switch (wMsg)

{

case WM_INITDIALOG:

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

//Инициализация прогрессной линейки

//все сообщения для линейки прогресса начинаются на PBM_

//их состав и назначение см. в MSDN

//С помощью спец.функции устанавливается диапазон работы прогресса

SendDlgItemMessage(hWnd, IDC_PROGRESS1, PBM_SETRANGE, 0, MAKELONG(0,100));

//и начальное состояние линейки прогресса

SendDlgItemMessage(hWnd, IDC_PROGRESS1, PBM_SETPOS, 50, 0);

//Для иллюстрации управления прогрессной линейкой мы вставили строку

//изменения позиции прогресса в блок управления вертикальной линейки прокрутки

//так, что теперь прогресс в точности отслеживает положение движка этой линейки

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

case WM_VSCROLL:

if (lParam == (LPARAM)hSlider || lParam == (LPARAM)hSpin)

switch (LOWORD(wParam))

{

case TB_PAGEUP:  MessageBox(hWnd, "SLAIDER", "TRECBAR", MB_OK );   break;

}

else {

switch (LOWORD(wParam))

{

case SB_PAGEUP: nTekV=max(0, nTekV-10); break;

case SB_LINEUP:   nTekV=max(0, nTekV-1); break;

case SB_PAGEDOWN: nTekV=min(100, nTekV+10); break;

case SB_LINEDOWN:  nTekV=min(100, nTekV+1); break;

case SB_THUMBPOSITION:

case SB_THUMBTRACK: nTekV=HIWORD(wParam); break;

}

SetScrollPos((HWND)lParam,SB_CTL,nTekV,TRUE);

// и изменить прогрессную линейку