Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

12.03.2008, 11:03. Просмотров 971. Ответов 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 ПРЕВРАЩАЕТСЯ В НОЛЬ!
Как сделать так чтобы как в Фотошопе (необязательно принудительно передвигать)?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2008, 11:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Тонкости работы ползунков (C++):

Низкоуровневые тонкости программирования на С++ - C++
Здравствуйте. Хотел бы узнать у опытных программистов, где можно найти литературу по более продвинутым вопросам программирования с С++,...

Тонкости быстрой сортировки - C++
Излазил кучу мест в сети. Нашел массу этих алгоритмов, но на поверку практически каждый не совсем работающий. Представляется, что в этой...

Тонкости типов данных - C++
Господа, подскажите, пожалуйста, в чем моя ошибка, не вижу, хоть убейся. Программа простейшая, но результат выдается в конце один и тот же,...

Объясните некоторые тонкости указателей - C++
Всем добрый вечер. Вот так выглядит сам код: //Программа объявляет указатель на массив типа double, затем выделяет память, заполняет и...

Прошу пояснить тонкости данного кода - C++
#include <math.h> <...> class CAccumulator { private: float value; static int lastId; int myId; public: CAccumulator( const...

Нюансы синтаксиса и тонкости использования указателей и массивов - C++
Доброго времени суток! Никак не могу понять, почему один вариант кода работает: #include <iostream> #include <stdlib.h> ...

2
petrovich1
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
12.03.2008, 14:32  [ТС] #2
Эй парни! Слабо ответить?
0
Bacek
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();
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2008, 13:37
Привет! Вот еще темы с ответами:

Какие книги стоит прочитать начинающему программисту С++ , чтобы понять все тонкости программирования? - C++
Чтобы узнать основные принципы всех парадигм программирования, чего стоит и не стоит делать, да и вообще, какие, по вашему мнению, книги...

Тонкости кода: wchar_t* FilterFiles = L"cool"; - C++
Я в функции создаю указатель на строку и потом этот указатель передаю в объект (поле объекта): wchar_t* FilterFiles = L&quot;cool&quot;; ...

Тонкости терминологии: что такое оператор, операция, инструкция и кто из них operator, а кто statement? - C++
лучше говорить операция, так как оператор в англоязычной литературе, это нечто иное...

Переделать программу работы с массивом для работы с вектором - C++
помогите переделать эту программу!!...при одном условии....вот что находится между int main() и return 0; сохранить.....здесь нужно...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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