如题,可以的话,如何实现,谢谢你的参与

解决方案 »

  1.   

    BitBlt等gdi函数可以帮你完成这个任务。
      

  2.   

    BOOL CClientView::OnEraseBkgnd(CDC* pDC) 
    {
    // TODO: Add your message handler code here and/or call default
    CRect rectbk;
    CDC dcMen;
    CBitmap bmbk;
    bmbk.LoadBitmap(IDB_BITMAP1);
    BITMAP stBitmap;
    bmbk.GetObject(sizeof(BITMAP),&stBitmap);
    CSize bmsize(stBitmap.bmWidth,stBitmap.bmHeight);
    dcMen.CreateCompatibleDC(pDC); 
    CBitmap *pold=dcMen.SelectObject(&bmbk);
    GetClientRect(&rectbk);
    pDC->StretchBlt(rectbk.left,rectbk.top,rectbk.Width(),rectbk.Height(),&dcMen,0,0,bmsize.cx,bmsize.cy,SRCCOPY);
    dcMen.SelectObject(pold);
    dcMen.DeleteDC();
    return true;
    }
      

  3.   

    LoadBitmap()对于24-bit位图有失真啊,并且我希望把用户选择的图像作为背景,而不是事先把资源中的一幅图作为背景。谢谢你们的答复
      

  4.   

    可以
    BOOL CClientView::OnEraseBkgnd(CDC* pDC) 
    {
    // TODO: Add your message handler code here and/or call default
    CRect rectbk;
    CDC dcMen;
    CBitmap bmbk;
    bmbk.LoadBitmap(IDB_BITMAP1);
    BITMAP stBitmap;
    bmbk.GetObject(sizeof(BITMAP),&stBitmap);
    CSize bmsize(stBitmap.bmWidth,stBitmap.bmHeight);
    dcMen.CreateCompatibleDC(pDC); 
    CBitmap *pold=dcMen.SelectObject(&bmbk);
    GetClientRect(&rectbk);
    pDC->StretchBlt(rectbk.left,rectbk.top,rectbk.Width(),rectbk.Height(),&dcMen,0,0,bmsize.cx,bmsize.cy,SRCCOPY);
    dcMen.SelectObject(pold);
    dcMen.DeleteDC();
    return true;
    }
      

  5.   

    那就把loadbmp改为loadimage()就好了呀。
      

  6.   

    BOOL CClientView::OnEraseBkgnd(CDC* pDC)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值

    CRect Rect;
    CDC dcMen;
    CBitmap bmbk;

    BITMAP bmp;
    HBITMAP hBitmap = (HBITMAP)::LoadImage(AfxGetApp()->m_hInstance,m_strBmpFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    if(hBitmap == NULL)
    {
    TRACE("Load file failed!");
    return CView::OnEraseBkgnd(pDC);
    }
    bmbk.Attach(hBitmap);
    bmbk.GetObject(sizeof(BITMAP),&bmp);

    dcMen.CreateCompatibleDC(pDC); 
    CBitmap *pOldBmp = dcMen.SelectObject(&bmbk);
    GetClientRect(&Rect);
    pDC->StretchBlt(Rect.left,Rect.top,Rect.Width(),Rect.Height(),&dcMen,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
    dcMen.SelectObject(pOldBmp);
    dcMen.DeleteDC();
    DeleteObject(hBitmap);
    return true;
    }
    strBmpFile为位图文件名,可在其他地方修改,选择一个位图后再发送WM_ERASEBKGND消息
    CDC *pDC = GetDC();
    SendMessage(WM_ERASEBKGND,(WPARAM)(pDC->m_hDC),0);
    ReleaseDC(pDC);
      

  7.   

    诸位,上述代码在CTreeView中不正常,为何?
      

  8.   

    pDC->BitBlt(Rect.left,Rect.top,Rect.Width(),Rect.Height(),&dcMen,0,0,SRCCOPY);
    就不會失真.
      

  9.   

    你把繪圖的代碼放在哪兒呀?如果放在oneraseBkgnd沒有問題呀.