Помогите разобраться
От: Andruxa-1  
Дата: 24.07.08 12:47
Оценка:
Добрый день!

Помогите разобраться с такой ситуацией.

Есть СДИ приложение. Наследуется от CScrollView.
Задаю режим MM_LOMETRIC

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

    CSize sizeTotal;
    // TODO: calculate the total size of this view
    sizeTotal.cx = sizeTotal.cy = 100;
    SetScrollSizes(MM_LOMETRIC, sizeTotal);
}



void CInventoryView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
{
    CScrollView::OnPrepareDC(pDC, pInfo);

    // TODO: Add your specialized code here and/or call the base class
    CRect rect;

    GetClientRect(&rect);

    pDC->SetMapMode(MM_LOMETRIC);
    pDC->SetViewportExt(rect.right, -rect.bottom);
    pDC->SetViewportOrg(rect.right/2, rect.bottom/2);
        
    
}



void CInventoryView::OnDraw(CDC* pDC)
{
    CInventoryDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);

    // TODO: add draw code for native data here
    OnPrepareDC(pDC);

    POSITION pos = NULL;

    CBasePoint *pShape = NULL;
    
    if(pDoc->m_ShapesList.GetCount() > 0)
        pos = pDoc->m_ShapesList.GetHeadPosition();

    while(pos != NULL)
    {
        pShape = pDoc->m_ShapesList.GetNext(pos);

        if(pShape != NULL)
            pShape->Show(pDC);
    }
}


void CInventoryView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    CInventoryDoc *pDoc = GetDocument();

    CPoint LogPoint = point;

    CDC *pDC = GetDC();
    
    OnPrepareDC(pDC);

    pDC->DPtoLP(&LogPoint);

    AddShape(LogPoint); //В этой функции создается объект и добовляется к списку объектов
            
    Invalidate();

    CScrollView::OnLButtonDown(nFlags, point);
}


Создаю класс, в нем я хочу вывести битмап, он выводится, но верх ногами и на некотором растоянии. Я понимаю, что тут проблема с преобразованием, но не могу найти свою ошибку.

void CSquare::Show(CDC* pDC)
{
        int s = m_wSize / 2;
    CRect rect(pCenter.x - s, pCenter.y + s, pCenter.x + s, pCenter.y - s); //Находим размер ограничивающей области

    CBitmap bm;
    CDC MemDC;

    bm.LoadBitmap(IDB_BITMAP1);
    
        BITMAP bmInf;

    bm.GetBitmap(&bmInf);

        MemDC.CreateCompatibleDC(pDC);
    MemDC.SelectObject(&bm);

    pDC->Rectangle(&rect);

    pDC->SetStretchBltMode(COLORONCOLOR);

    pDC->BitBlt(rect.left, rect.top, bmInf.bmWidth, bmInf.bmHeight, &MemDC, 0, 0, SRCCOPY);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.