VB里我记得可以直接用,但好象VC++里没有啊!所以想请教大家应该如何实现,谢谢先!

解决方案 »

  1.   

    学习
    VC不是VB,不要老是相比较
      

  2.   

    一、
    建立一个CDriveCombo类,基类为CComboBoxEx
    二、
    添加两个类成员
    CImageList m_pImageList;
    _TCHAR *m_pDriveStrings;
    三、
    在初始化函数里加入
    m_pImageList = NULL;
    m_pDriveStrings = NULL;在析构函数里加入
    if( m_pImageList != NULL )
    {
      m_pImageList->Detach();
      delete m_pImageList;
    }
    if( m_pDriveStrings != NULL )
      delete[] m_pDriveStrings;
    四、
    添加一函数把驱动器加入,在此我用AddItem()
    int AddItem()
    {
      if( m_pDriveStrings != NULL )
    return -1;  size_t lAllDriveStrings=GetLogicalDriveStrings( 0, NULL );  ASSERT( m_pDriveStrings == NULL );
    m_pDriveStrings=new _TCHAR[ lAllDriveStrings + sizeof( _T("")) ];
    if( GetLogicalDriveStrings( lAllDriveStrings, m_pDriveStrings ) != lAllDriveStrings - 1 )
    return -2;
    ASSERT( m_pDriveStrings != NULL ); COMBOBOXEXITEM CBEItem;
    CBEItem.mask=CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_TEXT | CBEIF_LPARAM;
    CBEItem.cchTextMax=0;
    CBEItem.iItem=-1; _TCHAR *pDriveString=m_pDriveStrings;
    size_t lDriveString = strlen( pDriveString );
    DWORD dIconSize=SHGFI_SMALLICON; while( lDriveString > 0 )
    {
    SHFILEINFO FileInfo;
    DWORD r=SHGetFileInfo( pDriveString, 0, &FileInfo, sizeof( FileInfo ),
    SHGFI_DISPLAYNAME | SHGFI_SYSICONINDEX | dIconSize );
    if( r == 0 )
    {
    TRACE0( "SHGetFileInfo函数调用失败!\n" );
    }
    else
    {
    CBEItem.pszText=FileInfo.szDisplayName;
    CBEItem.lParam  = ( LPARAM )pDriveString;
    CBEItem.iSelectedImage=CBEItem.iImage=FileInfo.iIcon;
    VERIFY( InsertItem( &CBEItem ) >= 0 );
    }
    pDriveString += lDriveString + 1;
    lDriveString = strlen( pDriveString );
    } ASSERT( m_pImageList == NULL );
    m_pImageList = new CImageList; SHFILEINFO FileInfo;
    VERIFY( m_pImageList->Attach(( HIMAGELIST )SHGetFileInfo( _T(".txt"),
    FILE_ATTRIBUTE_NORMAL, &FileInfo, sizeof( FileInfo ),
    SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX | dIconSize )));

    m_pImageList->SetBkColor( CLR_NONE );
    VERIFY( SetImageList( m_pImageList ) == NULL ); return GetCount();
    }   
    这样就OK了,最好别忘了把你的ComboBox控件申明变量,然后将其换成你自己的类。