VC 将界面中静态控件画的图形保存为bmp格式的图片

CWnd* pwnd=GetDlgItem(IDC_STATICDRAW);//获取静态控件的指针 CRect pRect;
// CWnd* pWnd=GetDlgItem(IDC_STATICDRAW);    
    CDC* pDC=pwnd->GetDC();   //使用控件指针创建绘图用的DC
   // pwnd->Invalidate();
  //  pwnd->UpdateWindow();
    pwnd->GetClientRect(&pRect);
    int w, h;
    w = pRect.right - pRect.left;
    h = pRect.bottom - pRect.top;
    CBitmap bm;
    bm.CreateCompatibleBitmap(pDC, w, h);
    CDC memdc;
    memdc.CreateCompatibleDC(pDC);
    CBitmap*pOld=memdc.SelectObject(&bm);
    memdc.BitBlt( 0, 0, w, h, pDC, pRect.left, pRect.top, SRCCOPY );     
    BITMAP btm;
    bm.GetBitmap(&btm);
    DWORD size=btm.bmWidthBytes*btm.bmHeight;
    LPSTR lpData=(LPSTR)::GlobalAlloc(GPTR,size);
    BITMAPINFOHEADER bih;
    bih.biBitCount=btm.bmBitsPixel;
    bih.biClrImportant=0;
    bih.biClrUsed=0;
    bih.biCompression=0;
    bih.biHeight=btm.bmHeight;
    bih.biPlanes=1;
    bih.biSize=sizeof(BITMAPINFOHEADER);
    bih.biSizeImage=size;
    bih.biWidth=btm.bmWidth;
    bih.biXPelsPerMeter=0;
    bih.biYPelsPerMeter=0;
    GetDIBits(memdc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);

    BITMAPFILEHEADER bfh;
    bfh.bfReserved1=bfh.bfReserved2=0;
    bfh.bfType=((WORD)('M'<< 8)|'B');
    bfh.bfSize=54+size;
    bfh.bfOffBits=54;

    CFile bf;
    if(bf.Open("a.bmp",CFile::modeCreate|CFile::modeWrite))
    {
        bf.Write(&bfh,sizeof(BITMAPFILEHEADER));
        bf.Write(&bih,sizeof(BITMAPINFOHEADER));
        bf.Write(lpData,size);
        bf.Close();

        MessageBox(_T("保存成功!"));
    }
    else
    {
        MessageBox(_T("保存失败!"));
    }
    memdc.SelectObject( pOld );
    bm.DeleteObject( );
    memdc.DeleteDC( );
    ::GlobalFree(lpData);

完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值