Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Привет!
PD>Проверить в его стиляж наличие WS_V(H)SCROLL PD>if (GetWindowLong(hWnd,GWL_STYLE) & WS_VSCROLL) PD> // есть вертикальный скроллбар
Это только один из возможных вариантов т.е покрывает только часть задачи
Целиком задачу вообще невозможно решить
это даже не говоря о том что есть ownerdraw тулбары
Есть только частные случаи например
Когда хэндл указывает на окошко IE
пройдет вариант что то вроде этого
CString strWindowClassName;
GetClassName(pWnd->GetSafeHwnd() , strWindowClassName.GetBuffer(MAX_PATH), MAX_PATH);
strWindowClassName.ReleaseBuffer();
if ( 0 == strWindowClassName.Compare(_T("Internet Explorer_Server")))
{
IsScrollWindow = TRUE; // возможно есть вертикальный скроллбар.
}
Т.е уже получается 2 частных случая
Когда управление окном происходит через CScrollBar практичесски невозможно сказать каким окном он управляет
В принципе есть интерестные попытки определит есть ли скролл у окна но они тоже работают не во всех случаях.. (если нужно могу поведать)
Исспользую совокупность всех средст возможно и можно получить более — менее хороший результат
Re[2]: Как определить
От:
Аноним
Дата:
26.08.04 11:15
Оценка:
PD>Проверить в его стиляж наличие WS_V(H)SCROLL PD>if (GetWindowLong(hWnd,GWL_STYLE) & WS_VSCROLL) PD> // есть вертикальный скроллбар
Unknown wrote: > > PD>Проверить в его стиляж наличие WS_V(H)SCROLL > PD>if (GetWindowLong(hWnd,GWL_STYLE) & WS_VSCROLL) > PD> // есть вертикальный скроллбар > > А как быть с CScrollBar?
ghostik wrote: > > Здравствуйте, Pavel Dvorkin, Вы писали:
> Это только один из возможных вариантов т.е покрывает только часть задачи > Целиком задачу вообще невозможно решить > это даже не говоря о том что есть ownerdraw тулбары
Что-то я не понял. Если класс есть Internet Explorer_Server, то
возможно, есть верт. скроллбар. ИМХО это можно про многие классы
сказать. Скорее уж можно сказать, у каких классов его нет — button, к
примеру, точно не имеет
> что бы быть 100% уверенным что есть скроллбар нужно получить IHTMLDocument2 и хорошенько пропарсить там разобрать на фреймы и тд...
А фреймы — не отдельные окна ?
> Когда управление окном происходит через CScrollBar практичесски невозможно сказать каким окном он управляет
Ну если иметь в виду, что им отдельный контрол управляет — вопрос вообще
не решаемый. Так как этот отдельный контрол можно в принципе и в другое
приложение засадить и пусть управляет
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Owner draw скроллбар ? Можно поподробнее ?
Конечно
Возможно я и применил не совсем корректный термин, но под Owner draw я хотел сказать что сам скроллбар рисуется и обрабатывается приложением
Самым простым примером является окошко IE
>>
PD>Что-то я не понял. Если класс есть Internet Explorer_Server, то PD>возможно, есть верт. скроллбар. ИМХО это можно про многие классы
Так задача стояла не определить окна в которые нет Скрола а определить окна в которых он ТОЧНО есть...
А я ко всему прочему сказал как определить есть ли у класса Internet Explorer_Server скролл или нет
правда и это не во всех случаях возможно. Но тем не менее кол-во найденных окон со скролом увеличивается...
PD>сказать. Скорее уж можно сказать, у каких классов его нет — button, к PD>примеру, точно не имеет
Вот как раз тут сказать "точно не имеет" нельзя
Мне же ни что не мешает засабклассить кнопку пририсовать к ней скрол и сделать так что бы текст на кнопке был скролируемый ))
И ни у кого не бедет механизма выяснит есть ли скрол на кнопке или нет
>> что бы быть 100% уверенным что есть скроллбар нужно получить IHTMLDocument2 и хорошенько пропарсить там разобрать на фреймы и тд... PD>А фреймы — не отдельные окна ?
К сожалению нет и вы можете сами в этом убедится натравив Spy
>> Когда управление окном происходит через CScrollBar практичесски невозможно сказать каким окном он управляет
PD>Ну если иметь в виду, что им отдельный контрол управляет — вопрос вообще PD>не решаемый. Так как этот отдельный контрол можно в принципе и в другое PD>приложение засадить и пусть управляет
Вопрос решаемый для определенных случаев...
Тем самым мы просто увеличиваем вероятность найти окно со скролом не более того
Здравствуйте, Pavel Dvorkin, Вы писали:
>> PD>Проверить в его стиляж наличие WS_V(H)SCROLL >> PD>if (GetWindowLong(hWnd,GWL_STYLE) & WS_VSCROLL) >> PD> // есть вертикальный скроллбар >> А как быть с CScrollBar?
PD>А это не скроллбар в окне, а отдельный контрол.
А как вообще определить можно ли окно проскролировать?
ghostik wrote: > > Здравствуйте, Pavel Dvorkin, Вы писали: > > PD>Owner draw скроллбар ? Можно поподробнее ? > Конечно > Возможно я и применил не совсем корректный термин, но под Owner draw я хотел сказать что сам скроллбар рисуется и обрабатывается приложением > Самым простым примером является окошко IE
Давай ч терминами разберемся. Есть скроллбар в окне, устанавливается
стилями WS_V(H)SCROLL. Есть плоский скроллбар в окне
(FlatSB_EnableScrollBar и т.д.). Есть отдельный контрол — окно класса
scrollbar.
ВСЕ.
Если можешь сказать, как сделать owner-draw скроллбар этих трех типов —
поблагодарю за информацию.
Все остальные затеи, пусть они 30 раз выглядят как скроллбар и работают,
как он, скроллбарами не явялются. Не слишком уж сложно нарисовать в
правой части окна нечто, похожее на скроллбар и обрабатывать там
WM_LBUTTONDOWN etc. Но это не скроллбар MS.
> PD>сказать. Скорее уж можно сказать, у каких классов его нет — button, к > PD>примеру, точно не имеет > > Вот как раз тут сказать "точно не имеет" нельзя > Мне же ни что не мешает засабклассить кнопку пририсовать к ней скрол и сделать так что бы текст на кнопке был скролируемый ))
Да, у меня один раз студент такое сделал. Я долго не мог понять, почему
у кнопки UpDown появился (именно так это выглядело
> И ни у кого не бедет механизма выяснит есть ли скрол на кнопке или нет
Ну почему же ? Проверить наличие стиля WS_V(H)SCROLL, как я и писал в
начале этого обсуждения.
> > >> что бы быть 100% уверенным что есть скроллбар нужно получить IHTMLDocument2 и хорошенько пропарсить там разобрать на фреймы и тд... > PD>А фреймы — не отдельные окна ? > > К сожалению нет и вы можете сами в этом убедится натравив Spy
Убедился. Здесь ты прав!
> PD>Ну если иметь в виду, что им отдельный контрол управляет — вопрос вообще > PD>не решаемый. Так как этот отдельный контрол можно в принципе и в другое > PD>приложение засадить и пусть управляет > > Вопрос решаемый для определенных случаев... > Тем самым мы просто увеличиваем вероятность найти окно со скролом не более того
Здравствуйте, Pavel Dvorkin, Вы писали:
>> PD>Owner draw скроллбар ? Можно поподробнее ? >> Конечно >> Возможно я и применил не совсем корректный термин, но под Owner draw я хотел сказать что сам скроллбар рисуется и обрабатывается приложением >> Самым простым примером является окошко IE
PD>Давай ч терминами разберемся. Есть скроллбар в окне, устанавливается PD>стилями WS_V(H)SCROLL. Есть плоский скроллбар в окне PD>(FlatSB_EnableScrollBar и т.д.). Есть отдельный контрол — окно класса PD>scrollbar.
Ок о терминах
Есть термин СкролБар это понятие относится к элементу пользовательского интерфейса
не важно как он был создан и не важно как он рисуется не важно кто им управляет
есть термин стандартный скрол бар (Standard Scroll Bars) это относится к WS_V(H)SCROLL
есть термин плоский скроллбар (Flat Scroll Bars) это к FlatSB_EnableScrollBar
есть термин Scroll Bar Controls это к окно класса scrollbar.
PD>ВСЕ. PD>Если можешь сказать, как сделать owner-draw скроллбар этих трех типов - PD>поблагодарю за информацию.
очень интересный примерчик здесь
PD>Все остальные затеи, пусть они 30 раз выглядят как скроллбар и работают, PD>как он, скроллбарами не явялются.
Писал выше... Скролбарами являются
не являются стандартными скрол барами , плоскиими скроллбарами и Scroll Bar Controls
> Не слишком уж сложно нарисовать в PD>правой части окна нечто, похожее на скроллбар и обрабатывать там PD>WM_LBUTTONDOWN etc. Но это не скроллбар MS.
просто ради интереса... скрол бары в IE они не относятся ни к одному из типов перечисленных вами...
Что же это ?
PD>Да, у меня один раз студент такое сделал. Я долго не мог понять, почему PD>у кнопки UpDown появился (именно так это выглядело ))))))))
>> И ни у кого не бедет механизма выяснит есть ли скрол на кнопке или нет PD>Ну почему же ? Проверить наличие стиля WS_V(H)SCROLL, как я и писал в PD>начале этого обсуждения.
А если стиля нет а скрол есть
Re[4]: Как определить
От:
Аноним
Дата:
27.08.04 11:15
Оценка:
Здравствуйте, ghostik, Вы писали:
А>>А как быть с CScrollBar? G>А для чего вообще нужна эта задача?
Мне нужно сделать картинку всего окна вместе с тем что не помещается в область видимую на экране (вместе со скролом)
для этого думал определить есть ли у окна хоть какой нибудь скрол бар что бы вынуть информацию из него
а затем принудительно скролируя делать картинку из части которая появляется на экране и плюсовать к тому что было до этого
Похоже, флейм начинается, так что я в последний раз, сорри!
ghostik wrote: > Ок о терминах > Есть термин СкролБар это понятие относится к элементу пользовательского интерфейса > не важно как он был создан и не важно как он рисуется не важно кто им управляет
Если так — снимаю все возражения. Потому что в этом случае я напишу свой
контрол, осуществляющий прокрутку, и как он устроен — никто знать не
будет. А прокручивать он будет.
Еще могу в консольном окне скролл устроить . Как FAR, к примеру. Как
насчет того, чтобы определить, есть там сейчас в файловой панели скролл
или нет ?
> > есть термин стандартный скрол бар (Standard Scroll Bars) это относится к WS_V(H)SCROLL > есть термин плоский скроллбар (Flat Scroll Bars) это к FlatSB_EnableScrollBar > есть термин Scroll Bar Controls это к окно класса scrollbar.
> очень интересный примерчик здесь
Посмотрю.
> просто ради интереса... скрол бары в IE они не относятся ни к одному из типов перечисленных вами... > Что же это ?
Нечто сделанное MS для прокрутки в IE. См., что я написал выше.
> > >> И ни у кого не бедет механизма выяснит есть ли скрол на кнопке или нет > PD>Ну почему же ? Проверить наличие стиля WS_V(H)SCROLL, как я и писал в > PD>начале этого обсуждения. > А если стиля нет а скрол есть
Если стиля нет, а скролл есть — значит это скролл, сделанный без стиля,
т.е. без Windows специальных средств, предназначенных для скроллинга
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, ghostik, Вы писали:
А>>>А как быть с CScrollBar? G>>А для чего вообще нужна эта задача?
А>Мне нужно сделать картинку всего окна вместе с тем что не помещается в область видимую на экране (вместе со скролом) А>для этого думал определить есть ли у окна хоть какой нибудь скрол бар что бы вынуть информацию из него А>а затем принудительно скролируя делать картинку из части которая появляется на экране и плюсовать к тому что было до этого
Ч чему этот гемор?
WM_PRINT
The WM_PRINT message is sent to a window to request that it draw itself in the specified device context, most commonly in a printer device context.
WM_PRINTCLIENT
The WM_PRINTCLIENT message is sent to a window to request that it draw its client area in the specified device context, most commonly in a printer device context.
... << RSDN@Home 1.1.3 stable >>
The darkness around me
Shores of solar sea
Oh how i wish to go down with the sun....
Re[6]: Как определить
От:
Аноним
Дата:
27.08.04 12:21
Оценка:
Здравствуйте, black hermit, Вы писали:
А>>>>А как быть с CScrollBar? G>>>А для чего вообще нужна эта задача? А>>Мне нужно сделать картинку всего окна вместе с тем что не помещается в область видимую на экране (вместе со скролом) А>>для этого думал определить есть ли у окна хоть какой нибудь скрол бар что бы вынуть информацию из него А>>а затем принудительно скролируя делать картинку из части которая появляется на экране и плюсовать к тому что было до этого BH>Ч чему этот гемор? BH>WM_PRINT BH>
BH>The WM_PRINT message is sent to a window to request that it draw itself in the specified device context, most commonly in a printer device context.
BH>WM_PRINTCLIENT BH>
BH>The WM_PRINTCLIENT message is sent to a window to request that it draw its client area in the specified device context, most commonly in a printer device context.
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, black hermit, Вы писали:
А>>>>>А как быть с CScrollBar? G>>>>А для чего вообще нужна эта задача? А>>>Мне нужно сделать картинку всего окна вместе с тем что не помещается в область видимую на экране (вместе со скролом) А>>>для этого думал определить есть ли у окна хоть какой нибудь скрол бар что бы вынуть информацию из него А>>>а затем принудительно скролируя делать картинку из части которая появляется на экране и плюсовать к тому что было до этого BH>>Ч чему этот гемор? BH>>WM_PRINT BH>>
BH>>The WM_PRINT message is sent to a window to request that it draw itself in the specified device context, most commonly in a printer device context.
BH>>WM_PRINTCLIENT BH>>
BH>>The WM_PRINTCLIENT message is sent to a window to request that it draw its client area in the specified device context, most commonly in a printer device context.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Похоже, флейм начинается, так что я в последний раз, сорри!
мдя...
PD>Если так — снимаю все возражения. Потому что в этом случае я напишу свой PD>контрол, осуществляющий прокрутку, и как он устроен — никто знать не PD>будет. А прокручивать он будет.
>> просто ради интереса... скрол бары в IE они не относятся ни к одному из типов перечисленных вами... >> Что же это ? PD>Нечто сделанное MS для прокрутки в IE. См., что я написал выше.
так вот для этого случая есть способ получить скроллбар
собственно о котором я и писал ранее...
Re[8]: Как определить
От:
Аноним
Дата:
27.08.04 12:34
Оценка:
BH>CreateCompatibleBitmap + MemoryDC
CreateCompatibleBitmap принимает на вход
nWidth
Specifies the width (in pixels) of the bitmap.
nHeight
Specifies the height (in pixels) of the bitmap.
а я их не знаю....
Я могу взять GetClientRect но это размеры только клиенской области
А мне нужно + еще не видимая часть
а еще допустим даже когда я знаю размеры (Width, Height)