Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Invalidate при SetScrollPos 
:(
    Опции темы
Dart
Дата 2.8.2006, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 26.6.2006
Где: Саратов, РФ

Репутация: 2
Всего: 2



Здравствуйте, народ!
Столкнулся с такой проблемой:
Код

void COleGridCtrl::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    SCROLLINFO   info;
    ShowEditCtrl(SW_HIDE);
    ShowToolTips(SW_HIDE);
    GetScrollInfo(SB_VERT, &info);

    int curpos = info.nPos;
    switch (nSBCode)
    {
    case SB_TOP:
        curpos = 0;
        break;
    case SB_BOTTOM:
        curpos = info.nMax;
        break;
    case SB_ENDSCROLL:
        break;
    case SB_LINEUP:
        if (curpos > 0)
            curpos--;
        break;
    case SB_LINEDOWN:
        if (curpos < info.nMax)
            curpos++;
        break;
    case SB_PAGEUP:
        if (curpos > 0) curpos = max(0, curpos - (int) info.nPage);
        break;
    case SB_PAGEDOWN:
        if (curpos < info.nMax) curpos = min(info.nMax, curpos + (int) info.nPage);
        break;
    case SB_THUMBPOSITION:
        curpos = nPos;
        break;
    case SB_THUMBTRACK:
        curpos = nPos;
        break;
    }
    m_cFirstVisCell.Row = curpos;
    SetScrollPos(SB_VERT, curpos);
    ShowEditCtrl(SW_RESTORE);
    ShowToolTips(SW_RESTORE);
}

Ну, т.е. практически как по учебнику. Но не тут-то было smile По идее, SetScrollPos должен перерисовывать контрол по умолчанию (bRedraw=TRUE). Но нет, он почему-то перерисовывает только сам ScrollBar, а OnPaint даже и не пытается вызвать. А Invalidate() работает нормально. В принципе, я и поставил Invalidate, только все таки хотелось бы разобраться: это что, глюк MFC или я что-то не так делаю?
--------------------
ЦитатаЛюблю смотреть, как другие работают
 Дж. К. ДжеромСайт: www.ecosigma.ruПочта: [email protected] 
PM MAIL WWW ICQ   Вверх
Earnest
Дата 2.8.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата

Sets the current position of a scroll box and, if requested, redraws the scroll bar to reflect the new position of the scroll box.

И с чего ты взял, что "по идее" эта функция должна перерисовывать окно? Она скроллбар перерисует, если TRUE. Конечно, нужно Invalidate. 
Кстати, можно не Invalidate, а ScrollWindow, а потом InvalidateRect: если перерисовка "тяжелая", это экономит ресурсы. Именно поэтому само окно и не перерисовывается - Windows не знает, как именно это сделать.



--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0395 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.