CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 2 of 2
  1. #1
    Join Date
    Apr 1999
    Posts
    3

    Bitmap Background in CFormView

    Hello.
    I Want to use bitmap background in CFormView.
    Please Show me the way.

    Bye.



  2. #2
    Join Date
    May 1999
    Location
    Wisconsin, USA
    Posts
    953

    Re: Bitmap Background in CFormView

    Several methods will need to change. Here is an example:

    These member variables will be needed:
    int m_bitmapLeft;
    int m_bitmapTop;
    CBitmap m_bitmap;

    void CFormcntlView::OnInitialUpdate()
    {
    CView::OnInitialUpdate();

    int tmpNum;
    int statusBarHeight=0;
    // screen resolution
    RECT tmpRec;

    // window area minus task bar
    SystemParametersInfo( SPI_GETWORKAREA, 0, &tmpRec, 0);

    WINDOWPLACEMENT wndPlace;
    wndPlace.length = sizeof(WINDOWPLACEMENT);
    CMainFrame* pFrame = (CMainFrame*)GetParent();
    pFrame->m_wndStatusBar.GetWindowPlacement(&wndPlace);
    statusBarHeight = wndPlace.rcNormalPosition.bottom - wndPlace.rcNormalPosition.top;
    // status bar positions not set yet
    statusBarHeight = 18;

    m_bitmap.LoadBitmap(IDB_MYBITMAPRESOURCE);
    BITMAP bm;
    m_bitmap.GetBitmap(&bm);

    tmpNum = tmpRec.bottom - tmpRec.top;
    // not sure why it needs to be times 3 but it works that way
    tmpNum -= (statusBarHeight * 3);
    if ( 0 > (tmpNum - bm.bmHeight))
    {
    m_bitmapTop = 0;
    }
    else
    {
    m_bitmapTop = (tmpNum - bm.bmHeight) / 2;
    }

    // width of bitmap
    tmpNum = tmpRec.right - tmpRec.left;
    if ( 0 > (tmpNum - bm.bmWidth))
    {
    m_bitmapLeft = 0;
    }
    else
    {
    m_bitmapLeft = (tmpNum - bm.bmWidth) / 2;
    }
    }

    void CFormcntlView::OnDraw(CDC* pDC)
    {
    CFormcntlDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);

    // TODO: add draw code for native data here
    CDC dc;
    dc.CreateCompatibleDC(pDC);
    CBitmap* pBitmap = dc.SelectObject(&m_bitmap);

    int xValue, yValue;
    xValue = GetSystemMetrics(SM_CXSCREEN);
    yValue = GetSystemMetrics(SM_CYSCREEN);

    pDC->BitBlt(m_bitmapLeft, m_bitmapTop, xValue, yValue, &dc, 0, 0, SRCAND);
    dc.SelectObject(pBitmap);
    }

    BOOL CFormcntlView::OnEraseBkgnd(CDC* pDC)
    {
    // TODO: Add your message handler code here and/or call default
    CRect clientRct;
    pDC->GetClipBox(&clientRct);

    RECT rct;
    BITMAP bm;
    m_bitmap.GetBitmap(&bm);
    rct.left = m_bitmapLeft;
    rct.top = m_bitmapTop;
    rct.right = m_bitmapLeft + bm.bmWidth;
    rct.bottom = m_bitmapTop + bm.bmHeight;

    CBrush brushBack(RGB(192,192,192)); // Gray
    CBrush* pOldBrush = pDC->SelectObject(&brushBack);
    pDC->PatBlt(clientRct.left, clientRct.top, clientRct.Width(), clientRct.Height(), PATCOPY);

    CBrush brushWhiteBack(RGB(255,255,255)); // White
    CRgn bitmapRegion;
    bitmapRegion.CreateRectRgnIndirect(&rct);
    pDC->FillRgn(&bitmapRegion, &brushWhiteBack);

    pDC->SelectObject(pOldBrush);

    return(TRUE);
    }



Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured