请问大家如何实现类似VB中的系统驱动器列表框(组合框)? VB里我记得可以直接用,但好象VC++里没有啊!所以想请教大家应该如何实现,谢谢先! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 学习VC不是VB,不要老是相比较 一、建立一个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控件申明变量,然后将其换成你自己的类。 atl手工添加窗口类(非com类) [散分]新博发布:OpenGL标签云 求助:怎么用VC++实现对AD采样后的数据处理 把ftp上的图片下载到本地 怎么写? 请问该如何实现三态按钮 请问y=lgx这个函数的曲线怎么画,急!!!在线等 MDI中"打开"问题! 送分,谁告诉我网络编程都应该学些什么?急急急!!! 如何让SDI程序一运行就处于最大化状态? 2个问题? 其实我学VC还有一段时间了,可惭愧的是,还有一个基本问题没搞懂!!请帮忙!谢谢 是不是客户端send一次,服务器端就响应一次OnReceive函数
VC不是VB,不要老是相比较
建立一个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控件申明变量,然后将其换成你自己的类。