void CImageView::OnDraw(CDC* pDC)
{
CImageDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CDC* memDC=new CDC;
pDC->TextOut(0,0,"ac");
memDC->CreateCompatibleDC(pDC);
CBitmap bitmap2;
bitmap2.LoadBitmap(IDB_BITMAP2);
memDC->SelectObject(&bitmap2);
pDC->BitBlt(0,y, 11,20 , memDC, 0, 0, SRCCOPY);
memDC->DeleteDC();

下面我想将我刚刚画到屏幕上的东西保存在一个BMP文件中,哪位给出一个完整一点的程序啊?初学,看了好几个这个问题的回帖,也没看明白

解决方案 »

  1.   

    void CTestSaveBmpView::SaveAsBmp(CString filename)
    {
    //定义图形大小
    int iWidth = 800;
    int iHeight = 600;
        int iPixel  = 16;
    //图形格式参数
        LPBITMAPINFO lpbmih = new BITMAPINFO;
        lpbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
        lpbmih->bmiHeader.biWidth = iWidth;
        lpbmih->bmiHeader.biHeight = iHeight;
        lpbmih->bmiHeader.biPlanes = 1;
        lpbmih->bmiHeader.biBitCount = iPixel;
        lpbmih->bmiHeader.biCompression = BI_RGB;
        lpbmih->bmiHeader.biSizeImage = 0;
        lpbmih->bmiHeader.biXPelsPerMeter = 0;
        lpbmih->bmiHeader.biYPelsPerMeter = 0;
        lpbmih->bmiHeader.biClrUsed = 0;
        lpbmih->bmiHeader.biClrImportant = 0;    //创建位图数据
        HDC hdc,hdcMem;
        HBITMAP hBitMap = NULL;
        CBitmap *pBitMap = NULL;
        CDC *pMemDC = NULL;
        BYTE *pBits;    hdc = CreateIC(TEXT("DISPLAY"),NULL,NULL,NULL);
        hdcMem = CreateCompatibleDC(hdc);
        hBitMap = CreateDIBSection(hdcMem,lpbmih,DIB_PAL_COLORS,(void **)&pBits,NULL,0);
       
    pBitMap = new CBitmap;
        pBitMap->Attach(hBitMap);
        pMemDC = new CDC;
        pMemDC->Attach(hdcMem);
        pMemDC->SelectObject(pBitMap);
         //
    CRect rc(0,0,iWidth,iHeight);
    pMemDC->SetBkMode(TRANSPARENT);
        //添加自绘图形 
    DrawCurve(pMemDC,rc);
        //保存到文件并创建位图结构    BITMAPFILEHEADER bmfh;
        ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));
        *((char *)&bmfh.bfType) = 'B';
        *(((char *)&bmfh.bfType) + 1) = 'M';
        bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
        bmfh.bfSize = bmfh.bfOffBits + (iWidth * iHeight) * iPixel / 8;    TCHAR szBMPFileName[128];
        int iBMPBytes = iWidth * iHeight * iPixel / 8;
        strcpy(szBMPFileName,filename);
        CFile file;
        if(file.Open(szBMPFileName,CFile::modeWrite | CFile::modeCreate))
        {
            file.Write(&bmfh,sizeof(BITMAPFILEHEADER));
            file.Write(&(lpbmih->bmiHeader),sizeof(BITMAPINFOHEADER));
            file.Write(pBits,iBMPBytes);
            file.Close();
        }    pMemDC->DeleteDC();
        delete pMemDC; pMemDC  = NULL;
        delete pBitMap; pBitMap = NULL;
        delete lpbmih;  lpbmih  = NULL;
    }
      

  2.   

    还是不明白,我上面的那个半截程序里,我写的东西在pDC指向的地方,我怎么在这个函数中引用这个指针?
      

  3.   

    DrawCurve()就是专门画图的函数,在http://www.vckbase.com/code/listcode.asp?mclsid=7这里有完整的代码