Взаимодействие классов
Сообщение о прокрутке в окне
Сообщение WM_HSCROLL приходит в окно диалога (читайте: объекту диалогового класса, связанного с окном) всякий раз, как пользователь изменяет положение одного из ползунков, расположенных на лице диалога. Это довольно удобно, так как мы можем в одной функции обработки (onHScroll) отследить изменения, произошедшие в любом из 11 регуляторов. Введите коды обработки этого сообщения, которые сходны с кодами, приведенными в приложении на основе MFC, за исключением СОМ-специфики общения между классами CPropDlg и COpenGL:
LRESULT CPropDlg::OnHScroll(UINT /*uMsg*/, WPARAM wParam, LPARAM iParam, BOOL& /*bHandled*/) { //====== Информация о событии запакована в wParara int nCode = LOWORD(wParam), nPos = HIWORD(wParam), delta, newPos; HWND hwnd = (HWND) IParam; // Выясняем номер и идентификатор активного ползунка UINT nID; int num = GetSliderNum(hwnd, nID); //====== Выясняем суть события switch (nCode) { case SB_THUMBTRACK: case SBJTHUMBPOSITION: m_Pos[num] = nPos; break; //====== Сдвиг до упора влево (клавиша Home) case SB_LEFT: delta = -100; goto New_Pos; //====== Сдвиг до упора вправо (клавиша End) case SB_RIGHT: delta = + 100; goto New_Pos; case SB_LINELEFT: // И т.д. delta = -1; goto New_Pos; case SB_LINERIGHT: delta = +1; goto New_Pos; case SB_PAGELEFT: delta = -20; goto New_Pos; case SB_PAGERIGHT: 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 0; } //=== Готовим текстовое выражение позиции ползунка char s[8]; sprintf (s,"%d",m_Pos[num]); SetDlgltemText(nID, (LPCTSTR)s); //====== Цикл пробега по всем объектам типа PropDlg for (UINT i = 0; i < m_nObjects;) //====== Добываем интеофейсн: //====== Добываем интерфейсный указатель CComQIPtr<IOpenGL, &IID_IOpenGL> p (m_ppUnk[i]); //====== Устанавливаем конкретный параметр if FAILED (p › SetLightParam (num, m_Pos [num])) ShowError(); return 0; } } return 0; }
В данный момент вы можете проверить функционирование регуляторов в суровых условиях СОМ. Они должны работать.