中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 位图操作
将图象列表转换成设备无关位图
作者:cnviolet 时间:2001-10-04 09:55 出处:互联网 责编:chinaitpower
              摘要:将图象列表转换成设备无关位图
       在我的PrintTree例子中,我想打印彩色的树控制.对于文本很容易,但是图标就
不简单了.我试着将图象列表转换成DIB,但是我真正需要的是一个方法,能够取出一
个ICON的DIB,而不是整个图象列表。下面就是我使用的具体方法:

HANDLE CAdvancedTreeCtrl::ImageToDIB( CImageList* pImageList, int iImageNumber, CWnd* pWnd, BOOL bOverlay, HTREEITEM actualItem )
{
    // Local Variables
    CBitmap bitmap;
    CWindowDC dc( pWnd );

    CDC memDC;
    CRect rect;
    CPalette    pal;
    IMAGEINFO   imageInfo;

    if( FALSE == pImageList->GetImageInfo( iImageNumber, &imageInfo ) )
    {
        // Getting of the Imageinfos failed
        return NULL;
    }

    // Create compatible stuff and select Bitmap
    if( FALSE == memDC.CreateCompatibleDC( &dc ) )
    {
        // Create failed
        return NULL;
    }

    if( FALSE == bitmap.CreateCompatibleBitmap( &dc,
                                            imageInfo.rcImage.bottom-imageInfo.rcImage.top,
                                            imageInfo.rcImage.right-imageInfo.rcImage.left ) )
    {
        // Create failed
        return NULL;
    }

    CBitmap* pOldBitmap = memDC.SelectObject( &bitmap );
    if( NULL == pOldBitmap )
    {
        // Select failed
        return NULL;
    }

    // Local Variables for Draw
    CPoint point( 0, 0);
    UINT nStyle = ILD_NORMAL;

    // Is there an Overlay
    if( TRUE == bOverlay )
    {
        TV_ITEM     tv_item;

        // Set up the Item-Struct
        tv_item.hItem       = actualItem;

        // Get the full Item-Struct
        GetItem( &tv_item );

        // Set the wanted style
        nStyle = ILD_TRANSPARENT|( tv_item.state & TVIS_OVERLAYMASK );
    }

    // Draw Image to the compatible DC
    if( FALSE == pImageList->Draw( &memDC, iImageNumber, point, nStyle ) )
    {
        // Drawing of the Image failed
        return NULL;
    }

    // Create logical palette if device support a palette
    if( dc.GetDeviceCaps( RASTERCAPS ) & RC_PALETTE )
    {
UINT        nSize   = sizeof(LOGPALETTE) + ( sizeof(PALETTEENTRY) * 256 );
LOGPALETTE* pLP     = (LOGPALETTE*)new BYTE[nSize];
pLP->palVersion     = 0x300;
pLP->palNumEntries = (unsigned short)GetSystemPaletteEntries( dc, 0, 255,
pLP->palPalEntry );

// Create the palette
pal.CreatePalette( pLP );

// Free memory
delete[] pLP;
    }

    memDC.SelectObject( pOldBitmap );

    // Convert the bitmap to a DIB
    return DDBToDIB( bitmap, BI_RGB, &pal );
}
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有