ClientRect после Скролла...
От: altmenn Германия DLR IPA
Дата: 08.04.03 15:19
Оценка:
В общем, много уже говорили мы тут про то, как организован скролл. Одним из важных моментов в этой идее было смещение координатов логического окна относительно видимого окна....Видимое окно, по идее, можно получить в любой момент с помощью GetClientRect(&rect), но я все чаще замечаю, что тут что то не так...
После того, как прокрутили скрол на одну страницу, как бы совем другое в этот Клиентский ректангл содержимое попадает. но если проверять это содержимое с помощью функции для регионов, то все время проверяеться содержимое с самой первой точки логического окна или, говоря по другому, всегда в клиентскую область попадает начальное содержимое....А как тогда узнать реальное содержимое Клиенского окна . или может мне другая функция нужна, а не GetClientRect?
Делаю так

в какой -то функции,которая после скрола вызываеться()
{
int    nIndexCurrent    = 0;
CRect rectClient;
CRgn   rgn;
_pwnd->GetClientRect(rectClient);
rgn.SetRectRgn(rectClient.left, rectClient.top, rectClient.right, rectClient.bottom);

for (int n=0; n<array.GetSize(); n++)
{
 if (    m_extycdataarray[n]
    &&    m_extycdataarray[n]->m_fDisplay)
    {
     CRect    rect    = CalcDrawingRect(_pwnd, nIndexCurrent);
    
        if(rgn.RectInRegion(rect))
        {
               UpdateContent(_fRef);
        }
        rgn.DeleteObject();
        nIndexCurrent++;
    }
 }
}
Безвыходных ситуаций не бывает!(Правило Кирхгофа)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.