Иллюстрированный самоучитель по Visual Studio.Net

быстровозводимые здания цена за квадратный метр. | Таможенно-брокерские услуги в ашхабаде ссылка. | РБК СТРОЙ, куплю муфты кабельные. | Реклама нижний новгород на Тв смотрите на http://ra-allin.ru. | Заказ такси в москве смотрите здесь. |

Диалог по управлению светом - часть 4


Воспользуйтесь для этого окном Properties и его кнопками Messages и Events. В обработчик OnHScroll введите логику определения ползунка и управления им с помощью мыши и клавиш. Подобный код мы подробно рассматривали в уроке 4. Прочтите объяснения вновь, если это необходимо, Вместе с сообщением WM_HSCROLL система прислала нам адрес объекта класса GScrollBar, связанного с активным ползунком. Мы добываем Windows-описатель его окна (hwnd) и передаем его в функцию GetsliderNum, которая возвращает целочисленный индекс. Последний используется для доступа к массиву позиций ползунков. Кроме этого, система передает nSBCode, который соответствует сообщению об одном из множества событий, которые могут произойти с ползунком (например, управление клавишей левой стрелки — SB_LINELEFT). В зависимости от события мы выбираем для ползунка новую позицию:

void CPropDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

//====== Windows-описатель окна активного ползунка

HWND hwnd = pScrollBar->GetSafeHwnd();

UINT nID;

//=== Определяем индекс в массиве позиций ползунков

int num = GetSliderNum(hwnd, nID) ;

int delta, newPos;

//====== Анализируем код события

switch (nSBCode)

{

case SBJTHUMBTRACK:

case SB_THUMBPOSITION: // Управление мышью

m_Pos[num] = nPos;

break; case SB_LEFT: // Клавиша Home

delta = -100;

goto New_Pos; case SB_RIGHT: // Клавиша End

delta = + 100;

goto New__Pos; case SB_LINELEFT: // Клавиша <-

delta = -1;

goto New_Pos; case SB_LINERIGHT: // Клавиша ->

delta = +1;

goto New_Pos; case SB_PAGELEFT: // Клавиша PgUp

delta = -20;

goto New_Pos; case SB_PAGERIGHT: // Клавиша PgDn

delta = +20-;

goto New_Pos;

New_Pos: // Общая ветвь

//====== Устанавливаем новое значение регулятора

newPos = m_Pos[num] + delta;

//====== Ограничения

m_Pos[num] = newPos<0 ? 0 :

newPos>100 ? 100 : newPos;

break; case SB ENDSCROLL:

default:

return;

}

//====== Синхронизируем текстовый аналог позиции

char s [ 8 ] ;



Начало  Назад  Вперед