我用IPreviewHandler把一个图象DoPreview到一个后台窗口上面,
我可以得到窗口的HDC,CDC.由于CDC是设备相关的,CDC 一直刷新,窗口不show出来就得不到我DoPreview上去的图.怎样才能把DC里面的位图取出来保存.

解决方案 »

  1.   

    不太明白你的意思。是不是可以在其它任意地方(不是刷新窗口消息的响应函数)获取显示DC,做一个兼容的内存DC,把显示内容送进去?
      

  2.   

    我是把我的东西显示到窗口上,但是这个窗口在后台,不能show出来.
    然后我再把显示在这个窗口的图,给抓出来.
      

  3.   

    没有呀,那是系统的com接口,就DoPreview了一下,显示到我指示的窗口上,我只能从我的窗口上去抓这个图,然而我的窗口又不能show出来.
      

  4.   

    HBITMAP GetSrcBit(HDC hDC,DWORD BitWidth, DWORD BitHeight)
    {
    HDC hBufDC;
    HBITMAP hBitmap, hBitTemp;
    //创建设备上下文(HDC)
    hBufDC = CreateCompatibleDC(hDC);
    //创建HBITMAP
    hBitmap = CreateCompatibleBitmap(hDC, BitWidth, BitHeight);
    hBitTemp = (HBITMAP) SelectObject(hBufDC, hBitmap);
    //得到位图缓冲区
    StretchBlt(hBufDC, 0, 0, BitWidth, BitHeight,
    hDC, 0, 0, BitWidth, BitHeight, SRCCOPY);
    //得到最终的位图信息
    hBitmap = (HBITMAP) SelectObject(hBufDC, hBitTemp);
    //释放内存
    DeleteObject(hBitTemp);
    ::DeleteDC(hBufDC);
    return hBitmap;
    }