熟悉CListCtrl控件的使用。
1. 如何添加标题栏。
参考代码:
void CDownloadToolDlg::InitUsbDeviceListCtrl()
{
//设置列表的样式
m_lst_UsbDevice.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_TRACKSELECT|LVS_EX_FLATSB|LVS_EX_UNDERLINEHOT|LVS_EX_GRIDLINES);
m_lst_UsbDevice.ModifyStyle(LVS_TYPEMASK,LVS_REPORT);
//设置标题栏
m_lst_UsbDevice.InsertColumn(0,_T("设备名称"),LVCFMT_IMAGE|LVCFMT_LEFT,80,80); //增加列
m_lst_UsbDevice.InsertColumn(1,_T("符号连接"),LVCFMT_LEFT,80);
m_lst_UsbDevice.InsertColumn(2,_T("容量"),LVCFMT_LEFT,80);
m_lst_UsbDevice.InsertColumn(3,_T("盘符"),LVCFMT_LEFT,80);
m_lst_UsbDevice.InsertColumn(4,_T("InstanceID"),LVCFMT_LEFT,80);
m_lst_UsbDevice.SetColumnWidth(0,220);
m_lst_UsbDevice.SetColumnWidth(1,120);
m_lst_UsbDevice.SetColumnWidth(2,90);
m_lst_UsbDevice.SetColumnWidth(3,40);
m_lst_UsbDevice.SetColumnWidth(4,450);
}
添加成员变量:打开【MFC Class Wizard】窗口,为列表视图控件添加成员变量m_lst_UsbDevice,控件类型为Control。对话框的主要功能是输入和输出数据,对话框需要有一组成员变量来存储数据,与控件相对应,成员变量可能是数据也可能是控件对象。
2. 如何添加数据到列表框中。
void CDownloadToolDlg::UpdateUsbDeviceList()
{
m_lst_UsbDevice.DeleteAllItems();
CUsbDeviceScanner::USBStorageDeviceInfoList::iterator UsbDeviceIter;
CCDRomDeviceScanner::CDRomDeviceInfoList::iterator cdromDeviceIter;
m_UsbDeviceScanner.GetUSBDevicesInSystem(m_CurrUsbStorageList);
m_usbCdromScanner.GetCDRomDevicesInSystem(m_curUsbCdromList);
CString szName;
CString szDesc;
int index = 0;
for(UsbDeviceIter = m_CurrUsbStorageList.begin();
UsbDeviceIter != m_CurrUsbStorageList.end();
UsbDeviceIter ++)
{
szName.Format(_T("%s"),UsbDeviceIter->szDeviceName.c_str());
m_lst_UsbDevice.InsertItem(index,szName);//增加一个新的条目
m_lst_UsbDevice.SetItemText(index, 1, (LPCTSTR)UsbDeviceIter->szDevicePhysicalName.c_str());
CCommUtil::ConvertStorageCapacity2CString(szDesc,UsbDeviceIter->nSize);
m_lst_UsbDevice.SetItemText(index, 2, szDesc);
CCommUtil::ConvertDriveStringList2CString(szDesc,UsbDeviceIter->szDriveLetterList);
m_lst_UsbDevice.SetItemText(index, 3, szDesc);
m_lst_UsbDevice.SetItemText(index, 4, UsbDeviceIter->szDeviceInstanceID.c_str());
index ++;
}
m_lst_UsbDevice.SetItemState( 0, LVIS_SELECTED | LVIS_FOCUSED,
LVIS_SELECTED | LVIS_FOCUSED); //设置第一个条目的状态
m_lst_UsbDevice.EnsureVisible( 0, FALSE);
}
3. 熟悉MessageBox的使用。
int CWnd::MessageBox(LPCTSTR lpszText, LPCTSTR lpszCaption, UINT nType)
lpszText:需要显示的内容
lpszCaption :用于指向该消息串口标题的字符串的指针,一般设置为NULL
ntype:表示该消息窗口的风格。由图标和按钮类型组成,两个类型的参数之间用->分割。
按钮风格
MB_ABORTRETRYIGNORE 消息框中显示Abort、Retry、Ignore按钮
MB_OK 显示OK按钮
MB_OKCANCEL 显示OK、Cancel按钮
MB_RETRYCANCEL 显示Retry、Cancel按钮
MB_YESNO 显示Yes、No按钮
MB_YESNOCANCEL 显示Yes、No、Cancel按钮
图标风格
MB_ICONINFORMATION 显示一个i图标,表示提示
MB_ICONEXCLAMATION 显示一个惊叹号,表示警告
MB_ICONSTOP 显示手形图标,表示警告或严重错误
MB_ICONQUESTION 显示问号图标,表示疑问
需要实现的功能:
1. 可以显示插入系统中的USB设备。
UpdateUsbDeviceList():在OnInitDialog(),OnDeviceChange(),OnBnClickedBtnRefresh()(刷新按钮)中调用。
UpdateUsbDeviceList()
{
获得设备列表,扫描设备;
符合条件的设备显示出来;
}
2. 按一个按钮可以显示选中的设备信息。
a) 获得列表对话框中,选中条目:
POSITION pos = pList->GetFirstSelectedItemPosition();
int nItem = pList->GetNextSelectedItem(pos);
b) 将得到的条目显示
问题:1、找不到头文件,绝对地址写入#include "./UsbComm/UsbDevice.h"
加入路径属性->C/C++->general-》additional include directories
2、afx_msg:消息标志,向系统申明:有消息映射到函数实现体。
如:afx_msg void OnStnClickedSeleusb();