请教高手,我新做了一个项目,是mfc 单文档框架,现在我想在我的主程序运行后再视图区加载一个公司的jpg图片上去,感觉挺麻烦,望指点迷津,我的视图区是基于view类

解决方案 »

  1.   

    麻烦一点的是你可能需要处理透明的问题,否则一张方方正正的图片,在不同的分辨率下有点丑最好是写一个Static的继承类,在里面处理OnPaint消息,根据背景对于图片透明化,动态打印其它启动字幕
      

  2.   

    如果想简单点,建议把JPG图片转换成BMP图片
    然后加到资源中,假如浆糊ID为:IDB_BACKGROUND,再增加如下代码即可:void CXXXView::OnDraw(CDC* pDC)
    {
    CSurfaceDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc); DrawBackGround(pDC, IDB_BACKGROUND);
    }void CXXXView::DrawBackGround(CDC *pDC, UINT nIDResource)
    {
    CBitmap bitmap;
    if (!bitmap.LoadBitmap(IDB_BACKGROUND))
    return;

    CDC dcImage;
    if (!dcImage.CreateCompatibleDC(pDC))
    return;

    BITMAP bm;
    bitmap.GetBitmap(&bm);

    // Paint the image.
    CBitmap* pOldBitmap = dcImage.SelectObject(&bitmap);
    pDC->BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcImage, 0, 0, SRCCOPY);
    dcImage.SelectObject(pOldBitmap);
    }
      

  3.   

    void CBhView::OnDraw(CDC* pDC)
    {
    CBhDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    IPicture *pPic; 
    IStream *pStm; 

    CFileStatus fstatus; 
    CFile file; 
    LONG cb; 
    char buffer[200];
    _getcwd(buffer,200);
    CString str=buffer; 

    str.Format(_T("%s"), buffer);
    str = buffer;
    str=str+"\\1.jpg";//注意在串里面的就是字符,如果要输出一个字符
    //“/”,就是要输出一个转义的字符
    // AfxMessageBox(str);
    if (file.Open(str,CFile::modeRead)
    && file.GetStatus(str, fstatus) 
    && ((cb = fstatus.m_size) != -1))

    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb); 
    LPVOID pvData = NULL; 
    if (hGlobal != NULL) 

    if ((pvData = GlobalLock(hGlobal)) != NULL) 

    file.ReadHuge(pvData, cb); 
    GlobalUnlock(hGlobal); 
    CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); 

    if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,
    IID_IPicture,(LPVOID*)&pPic))) 

    OLE_XSIZE_HIMETRIC hmWidth; 
    OLE_YSIZE_HIMETRIC hmHeight; 

    pPic->get_Width(&hmWidth); 
    pPic->get_Height(&hmHeight); 

    double fX,fY; 
    fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/
    ((double)pDC->GetDeviceCaps(HORZSIZE)*100.0); 
    fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/
    ((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);
    // (DWORD)fX,(DWORD)fY
    if(FAILED(pPic->Render(*pDC,0,0,500,300,
    0,hmHeight,hmWidth,-hmHeight,NULL))) 
    AfxMessageBox("Failed To Render The picture!");
    //pDC->TextOut(120,175,"这是一个JPG图像");
    pPic->Release(); 

    else
    {
    AfxMessageBox("Error Loading Picture From Stream!"); 
    }



    else 
    {
    AfxMessageBox("Can't Open Image File!");
    }
    }
    //给楼主一个我已经实现的例子,在view类中重载ondraw,要在文件头加上#include <direct.h>,因为运用了_getcwd获取当前路径库函数,str=str+"\\1.jpg"是加载jpg文件的名称。