Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];

Вниз

Scroll-лирование клиентской области окна   Найти похожие ветки 

 
idr   (2004-01-19 14:44) [0]

Всем хорошего расположения духа!
Вопрос следующий: Необходимо сделать попиксельный скролл клиентской области, за основу взят (добавил бы - практически скопирован :)) соответствующий пример из MSDN - Using Scroll Bars => Scrolling a Bitmap, где отсутствует отрисовка битмапа, просто происходит соответствующий сдвиг с помощью ScrollWindow.
В процедуре-обработчике окна(точнее диалога) в WM_INITDIALOG его размер уменьшается (с помощью SetWindowPos) до половин экрана по обоим измерениям (GetSystemMetrics(SM_CX(CY)SCREEN)/2).Все бы хорошо, но когда изначальные (до уменьшения) размеры диалога превосходят размеры desktop-а, скроллбары отказываются работать верно :(
Помогите кто сможет! Перерыл весь соотв. раздел MSDN - не помогло...


 
Игорь Шевченко ©   (2004-01-20 10:27) [1]

idr   (19.01.04 14:44)

А в чем проявляется "неправильность" работы ? Я, кстати, портировал этот пример на Delphi, особой странности не замечал. Может, плохо смотрел.


 
idr   (2004-01-20 14:02) [2]

Неправильность заключается в следующем:
(во-первых пример теоретически (правда я не проверял :)) вообще работать в случае большого bitmap-a не должен так как в той же MSDN написано:
в примере:
xMaxScroll = max(bmp.bmWidth-xNewSize, 0);
...
si.nPage  = xNewSize;
...
SetScrollInfo(hwnd, SB_HORZ, &si, TRUE);


в документации по SetScrollInfo:
"The SetScrollInfo function performs range checking on the values specified by the nPage and nPos members of the SCROLLINFO structure.
The nPage member must specify a value from 0 to nMax - nMin +1. The nPos member must specify a value between nMin and nMax - max( nPage– 1, 0). If either value is beyond its range, the function sets it to a value that is just within the range."


то есть si.nPage=si.nMax+1 при размере (xNewSize>bmp.bmWidth/2),
а в этом случае вообще говоря скроллбар должен вообще пропасть с экрана (что у меня и было)
Извиняюсь за некоторую нудность....но привожу это все лишь для описания своей проблемы...:)
Ближе к делу:
я устанавливаю si.nMax в ширину клиентской области(~bmp.bmWidth) и вручную проверяю xCurrentScroll на вхождение в отрезок:
(si.nMin ... si.nMax-si.nPage) в обработчике WM_HSCROLL
тогда я ожидаю следующего:
xCurrentScroll пробежит значения от si.nMin (он всегда 0) до соответствующего значения si.nMax-si.nPage, при этом когда бегунок достигнет правой границы то на экране должна быть "самая правая часть" клиентской области.
Так вот если "изначальный" размер клиентской области больше размера экрана, то это не так :( в противополжном случает все работает...


 
Игорь Шевченко ©   (2004-01-20 15:59) [3]


> Так вот если "изначальный" размер клиентской области больше
> размера экрана


Охотно верю, пример на это не рассчитан, скорее всего. Увы.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.034 c
7-1073404388
Cure
2004-01-06 18:53
2004.03.28
Автозагрузка


1-1079009278
Strelka
2004-03-11 15:47
2004.03.28
меню дочерней формы


1-1078385298
Юкс
2004-03-04 10:28
2004.03.28
Создание интерпретатора


9-1063077549
Интересующийся
2003-09-09 07:19
2004.03.28
Мазайка на Delphi or Pascal 7.0


14-1077805034
Style
2004-02-26 17:17
2004.03.28
Set Focus





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский