CScrollView и КПК
От: xenol  
Дата: 30.03.09 12:59
Оценка:
День добрый, пишу приложение для КПК на MFC.
У меня проект основан на диалогах, но мне нужна прокручиваемая область, поэтому я прикрутил CscrollView к CDialog (выдрал из какой-то статьи):

CScrollView *pInfoScroll ;
m_pInfoScroll = (MyScrollView*)(RUNTIME_CLASS(MyScrollView)->CreateObject());
    CCreateContext context;
    context.m_pCurrentDoc = NULL;
    m_pInfoScroll->Create(NULL,
          NULL, 
          NULL,
// you will have to adjust the size of this rect to make
// the view fit at the desired location in your dialog box.
        CRect(0, 0, clientRect.Width(), clientRect.Height()), 
          this, 
          123, 
          &context);
    
    ((CScrollView*)m_pInfoScroll)->OnInitialUpdate();
    m_pInfoScroll->ShowWindow(SW_SHOW);


На компоненте CScrollView я рисую в обработчике OnDraw:


void CscrollviewView::OnDraw(CDC* pDC)
{
    CDC memDC;
    memDC.CreateCompatibleDC(pDC);

    CBitmap b;
    CRect rect;
    GetClientRect(&rect);
    b.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
    memDC.SelectObject(&b);
    memDC.FillSolidRect(rect, RGB(0xff,0xff,0xff));
    memDC.FillSolidRect(50, 50, 160, 120, RGB(255, 255, 128));
    memDC.Ellipse(50 + 80, 50, 50 + 80 + 160, 50 + 120);
        
    memDC.MoveTo(32767, 50);
    memDC.LineTo(32767, 150);

    memDC.MoveTo(32600, 100);
    memDC.LineTo(32900, 100);
    CPoint cp = GetScrollPosition();
    

    pDC->BitBlt(0, cp.y, rect.Width(), rect.Height(), &memDC, 0, cp.y, SRCCOPY);
    // TODO: add draw code for native data here
}


и еще функция :

void CscrollviewView::OnInitialUpdate()
{
    CScrollView::OnInitialUpdate();


    CSize sizeTotal;
    // TODO: calculate the total size of this view
    CRect clientRect;
    GetClientRect(&clientRect);

    SetScrollSizes(MM_TEXT, CSize(clientRect.Width(), clientRect.Height()*2));
    this->Invalidate();
}


Так вот суть проблемы: не хочет перерисовываться CScrollView после того, как я подергаю скроллеры, хотя, если сделать тот же самый код для нормального MFC приложения и использовать MDI форму — то этот код работает, под эмулятором я проверял, после того как я подергаю скроллеры, то функция OnDraw — снова вызывается!!! но не перерисовает контент. Еще пробовал баловаться функцией

BOOL CscrollviewView::OnEraseBkgnd(CDC * pDC) {
    return FALSE;
}

пробовал и без нее, ничего не помогает.
Уважаемые ГУРУ, может кто сталкивался с этой бедой? Заранее людям, потратившим свое время говорю СПАСИБО!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.