有一个activeX控件,是根据输入数据显示图形的,可是它没有提供获取图形的方法,只能在它自己的窗口绘出图形,有没有办法把它显示的图形获取变成CBitmap之类的东西,然后绘到一个view中?或者直接把控件自己窗口的显示绘到程序的CView中?
反正最终我希望能保存这个控件的图形,并可以在程序里编辑、打印。
请帮忙,先谢了!

解决方案 »

  1.   

    //屏幕2位图
    HBITMAP CopyScreenToBitmap(LPRECT lpRect)
     //lpRect 代表选定区域
    {
    HDC       hScrDC, hMemDC;      
     // 屏幕和内存设备描述表
    HBITMAP    hBitmap, hOldBitmap;   
     // 位图句柄
    int       nX, nY, nX2, nY2;      
    // 选定区域坐标
    int       nWidth, nHeight;      
    // 位图宽度和高度
    int       xScrn, yScrn;         
    // 屏幕分辨率   // 确保选定区域不为空矩形
       if (IsRectEmpty(lpRect))
         return NULL;
       //为屏幕创建设备描述表
       hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
       //为屏幕设备描述表创建兼容的内存设备描述表
       hMemDC = CreateCompatibleDC(hScrDC);
       // 获得选定区域坐标
       nX = lpRect- >left;
       nY = lpRect- >top;
       nX2 = lpRect- >right;
       nY2 = lpRect- >bottom;
       // 获得屏幕分辨率
       xScrn = GetDeviceCaps(hScrDC, HORZRES);
       yScrn = GetDeviceCaps(hScrDC, VERTRES);
       //确保选定区域是可见的
       if (nX 〈0)
          nX = 0;
       if (nY 〈  0)
          nY = 0;
       if (nX2 > xScrn)
          nX2 = xScrn;
       if (nY2 > yScrn)
          nY2 = yScrn;
       nWidth = nX2 - nX;
       nHeight = nY2 - nY;
       // 创建一个与屏幕设备描述表兼容的位图
    hBitmap = CreateCompatibleBitmap
     (hScrDC, nWidth, nHeight);
       // 把新位图选到内存设备描述表中
       hOldBitmap = SelectObject(hMemDC, hBitmap);
       // 把屏幕设备描述表拷贝到内存设备描述表中
    BitBlt(hMemDC, 0, 0, nWidth, nHeight,
     hScrDC, nX, nY, SRCCOPY);
       //得到屏幕位图的句柄
       hBitmap = SelectObject(hMemDC, hOldBitmap);
       //清除 
       DeleteDC(hScrDC);
       DeleteDC(hMemDC);
       // 返回位图句柄
       return hBitmap;
    }