Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
petrovich1
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
#1

Тонкости работы ползунков - C++

12.03.2008, 11:03. Просмотров 893. Ответов 2
Метки нет (Все метки)

Я обрабатываю следующие сообщения:
C++
1
2
3
4
5
6
7
if(nSBCode == SB_THUMBPOSITION || nSBCode == SB_THUMBTRACK
        || nSBCode == SB_PAGERIGHT || nSBCode == SB_PAGELEFT 
        || nSBCode == SB_LINELEFT  || nSBCode == SB_LINERIGHT )
    {
        m_text1.Format('%ld',nPos);
        UpdateData(false);
    }
Когда я передвигаю сам ползунок, то m_text1 приобретает нужные мне значения. Когда же я просто кликаю на полосе прокрутки, то ползунок перемещается в это место, но m_text1 ПРЕВРАЩАЕТСЯ В НОЛЬ!
Как сделать так чтобы как в Фотошопе (необязательно принудительно передвигать)?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2008, 11:03     Тонкости работы ползунков
Посмотрите здесь:

C++ Тонкости быстрой сортировки
C++ Начало работы с ПО С++
Работы в векторами. C++
C++ Прошу пояснить тонкости данного кода
Низкоуровневые тонкости программирования на С++ C++
Тонкости кода: wchar_t* FilterFiles = L"cool"; C++
C++ Тонкости типов данных
C++ Нюансы синтаксиса и тонкости использования указателей и массивов
Переделать программу работы с массивом для работы с вектором C++
Объясните некоторые тонкости указателей C++
Тонкости терминологии: что такое оператор, операция, инструкция и кто из них operator, а кто statement? C++
C++ Какие книги стоит прочитать начинающему программисту С++ , чтобы понять все тонкости программирования?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
petrovich1
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
12.03.2008, 14:32  [ТС]     Тонкости работы ползунков #2
Эй парни! Слабо ответить?
Bacek
Сообщений: n/a
20.03.2008, 13:37     Тонкости работы ползунков #3
Эй, парень. А слабо хелп почитать ?

nPos

Contains the current scroll-box position if the scroll-bar code is SB_THUMBPOSITION or SB_THUMBTRACK; otherwise not used. Depending on the initial scroll range, nPos may be negative and should be cast to an int if necessary.

Для остальных кодов можешь узнать текущее положение из GetScrollPos или GetScrollInfo и в зависимости от кода nSBCode самому позиционировать на сколько тебе нравиться. Ты же лучше должен знать, какая у тебя страница и т.п.

Вот типичный мой обработчик:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
void CPMTree::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar*) 
{
    SCROLLINFO si;
    si.cbSize = sizeof(si);
    si.fMask  = SIF_ALL;
 
    GetScrollInfo(SB_VERT, &si, si.fMask);
 
    // Если разность между si.nMin и si.nMax больше 32767, 
    // то надо использовать si.nTrackPos, а если меньше, то можно
    // брать и nPos. А можно и всегда брать только nPos - 
    // как нравится.
    if (si.nMax - si.nMin < 32767)
        si.nTrackPos = nPos;
 
    int nOldValue = si.nPos;
 
    switch(nSBCode)
    {
    case SB_LINEUP:
        if (si.nPos > si.nMin + m_nLineHeight)
            si.nPos -= m_nLineHeight;
        else
            si.nPos = si.nMin;
        break;
    case SB_LINEDOWN:
        if (si.nPos < si.nMax - (int)si.nPage + 1 - m_nLineHeight)
            si.nPos += m_nLineHeight;
        else
            si.nPos = si.nMax - (int)si.nPage + 1;
        break;
    case SB_PAGEUP:
        if (si.nPos > si.nMin + (int)si.nPage)
            si.nPos -= si.nPage;
        else
            si.nPos = si.nMin;
        break;
    case SB_PAGEDOWN:
        si.nPos += si.nPage;
 
        if (si.nPos > si.nMax - (int)si.nPage + 1)
            si.nPos = si.nMax - (int)si.nPage + 1;
        break;
    case SB_THUMBTRACK: 
    case SB_THUMBPOSITION:
        si.nPos = si.nTrackPos;
        break;
    }
 
    if (nOldValue != si.nPos)
    {
      CancelMode();
    
        si.fMask = SIF_POS;
        SetScrollInfo(SB_VERT, &si, TRUE);
        Invalidate();
 
        UpdateTip();
    }
}
Yandex
Объявления
20.03.2008, 13:37     Тонкости работы ползунков
Ответ Создать тему
Опции темы

Текущее время: 13:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru