把VIEW中 DC 内容 保存图像, 程序如下, 保存后 是空白,求问题在那里。 分不够再继。BOOL CNewGalogView::WriteWindowToDIB(LPTSTR szFile, CWnd *pWnd)
{
CBitmap  bitmap;
CWindowDC dc(pWnd);
CDC  memDC;
CRect rect; memDC.CreateCompatibleDC(&dc); pWnd->GetWindowRect(rect); bitmap.CreateCompatibleBitmap(&dc, rect.Width(),rect.Height() ); CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);
memDC.BitBlt(0, 0, rect.Width(),rect.Height(), &dc, 0, 0, SRCCOPY); // Create logical palette if device support a palette
CPalette pal;
if( dc.GetDeviceCaps(RASTERCAPS) & RC_PALETTE )
{
UINT nSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * 256);
LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize];
pLP->palVersion = 0x300; pLP->palNumEntries =
GetSystemPaletteEntries( dc, 0, 255, pLP->palPalEntry ); // Create the palette
pal.CreatePalette( pLP ); delete[] pLP;
} memDC.SelectObject(pOldBitmap); // Convert the bitmap to a DIB
HANDLE hDIB = DDBToDIB( bitmap, BI_RGB, &pal ); if( hDIB == NULL )
return FALSE; // Write it to file
WriteDIBNEW( szFile, hDIB ); // Free the memory allocated by DDBToDIB for the DIB
GlobalFree( hDIB );
return TRUE;
}

解决方案 »

  1.   

    原来有DDBToDIB这个函数可以用。我之前做过类似的程序,还去研究bmp图片格式呢,唉~~或者,会不会就是DDBToDIB这个函数有什么地方遗漏了呢?
      

  2.   

    图片属于资源,你思路没错,不过 我想你放在构造函数里,应该也同时被析勾掉。 我是新手,意见仅供参考。应该在view类 最上面 定义下 CBitmap bitmap;
    这样估计就可以
      

  3.   

    摆渡一下这方面的例子程序。这里有个原码站,找找吧:http://www.yuanma.org/
      

  4.   

    http://community.csdn.net/Expert/topic/5202/5202022.xml?temp=6.196231E-02
    ===================================
    参考一下这个帖子吧,这个实现的很好!也是从内存拷位图的!