73上位机VC MFC组合框加载系统硬盘盘符
73上位机VC MFC组合框加载系统硬盘盘符
功能展示
任何的程序开发与硬盘打交道,进行数据文件的操作都是时有发生的,那么获取系统有效的盘符,进而完成数据文件的保存与加载就是必须的,我们当前工程实现系统有效盘符的加载并显示在组合框中供用户选择,效果如图 要点提示 我们当前例程使用函数GetLogicalDriveStrings()获取当前系统全部有效盘符;DWORD GetLogicalDriveStrings( DWORD nBufferLength, // size of buffer LPTSTR lpBuffer // pointer to buffer for drivestrings ); nBufferLength为字符缓冲区的长度, lpBuffer 为接收数据的字符缓冲区;如果函数所选成功,返回值是缓冲区中字节数,不包括终止符,如果失败,返回0;
另外获取系统的图标用函数SHGetFileInfo(); 我们例程使用这种形式获得;HIMAGELIST hImage =(HIMAGELIST)SHGetFileInfo("C:\\",FILE_ATTRIBUTE_NORMAL,&shInfo,sizeof( SHFILEINFO ), SHGFI_SYSICONINDEX | SHGFI_ICON ); “C:\\”表示获得C盘字符, FILE_ATTRIBUTE_NORMAL表示获得文件通过属性; shInfo用于接收获得的信息; sizeof( SHFILEINFO),表示接收缓存的大小; SHGFI_SYSICONINDEX| SHGFI_ICON 表示获得系统的大图标;
实现功能 1.新建基于对话框的应用程序
2.拖拽一个扩展组合框控件并关联变量CComboBoxEx m_Combo;添加一按钮,并关联一消息响应函数,函数体如下 - void CGkbc8Dlg::OnAdd()
- {
- if(m_DiskImageList.m_hImageList)return; //已加载过图标 返回
- SHFILEINFO shInfo;
- memset(&shInfo,0,sizeof(SHFILEINFO));
- HIMAGELIST hImage = (HIMAGELIST)SHGetFileInfo("C:\",FILE_ATTRIBUTE_NORMAL,&shInfo, sizeof( SHFILEINFO ),
- SHGFI_SYSICONINDEX | SHGFI_ICON );//获取系统全部大图标句柄
- m_DiskImageList.Attach(hImage); //加载盘符图片
-
- m_Combo.SetImageList(&m_DiskImageList);//设置图标
- m_Combo.ResetContent();//消除组合框全部内容
- char pchDrives[MAX_PATH] = {0};
- GetLogicalDriveStrings(sizeof(pchDrives), pchDrives) ;//获取系统全部有效盘符 格式:"C:\ D:\ D:\ E:\ "
- char* pchDrive;
- pchDrive = pchDrives;
- int nItem = 0;
复制代码- while(*pchDrive)
- {
- COMBOBOXEXITEM cbi;
- CString csText;
- cbi.mask = CBEIF_IMAGE|CBEIF_INDENT|CBEIF_OVERLAY| CBEIF_SELECTEDIMAGE|CBEIF_TEXT;
- SHFILEINFO shInfo;
- int nIcon;
- SHGetFileInfo(pchDrive, 0, &shInfo, sizeof(shInfo), SHGFI_ICON|SHGFI_SMALLICON);
- nIcon = shInfo.iIcon;
- cbi.iItem = nItem;
- cbi.pszText = pchDrive;
- cbi.cchTextMax = strlen(pchDrive);
- cbi.iImage = nIcon;
- cbi.iSelectedImage = nIcon;
- cbi.iOverlay = 0;
- cbi.iIndent = (0 & 0x03);
- m_Combo.InsertItem(&cbi);
- nItem++;
- pchDrive += strlen(pchDrive) + 1;
- }
- m_Combo.SetCurSel(0);//设置默认显示的的组合框项
- }
复制代码我们来演示下功能实现的整个过程
|