声明接受WindowProc消息的处理函数,
1、如果消息是WM_DEVICHANGE则有磁盘更改消息,那么将进行处理
2、如果参数lparam是DEV_BROADCAST_HDR结构,进行下一步处理,否则不处理
3、如果该结构的dbch_devicetype是DBT_DEVTYE_VOLUME,那么进行处理,否则不处理
4、如果PDEV_BROADCAST_VOLUME结构的dbcv_flags和DBTF_MEDIA安慰与为0则确定为U盘,否则可能是移动光驱之类
1、如果消息是WM_DEVICHANGE则有磁盘更改消息,那么将进行处理
2、如果参数lparam是DEV_BROADCAST_HDR结构,进行下一步处理,否则不处理
3、如果该结构的dbch_devicetype是DBT_DEVTYE_VOLUME,那么进行处理,否则不处理
4、如果PDEV_BROADCAST_VOLUME结构的dbcv_flags和DBTF_MEDIA安慰与为0则确定为U盘,否则可能是移动光驱之类
- LRESULT CImportExportDlg::WindowProc(UINT message,WPARAM wParam,LPARAM lParam)
- {
- if(message == WM_DEVICECHANGE)
- {
- CString str;
- DEV_BROADCAST_HDR *dbr = (DEV_BROADCAST_HDR*)lParam;
- if(wParam == DBT_DEVICEARRIVAL)
- {
- if(dbr->dbch_devicetype == DBT_DEVTYP_VOLUME)
- {
- PDEV_BROADCAST_VOLUME pbv = (PDEV_BROADCAST_VOLUME)dbr;
- if(pbv->dbcv_flags & DBTF_MEDIA)
- {
- }
- else
- {
- str.Format(L"有U盘 盘符为 %c 插入",this->FirstDriveFormMask(pbv->dbcv_unitmask));
- CString opr("://");
- this->SearchAndShowFiles(this->FirstDriveFormMask(pbv->dbcv_unitmask) + opr);
- }
- }
- }
- if(wParam == DBT_DEVICEREMOVECOMPLETE)
- {
- if(dbr->dbch_devicetype == DBT_DEVTYP_VOLUME)
- {
- PDEV_BROADCAST_VOLUME pbv = (PDEV_BROADCAST_VOLUME)dbr;
- if(pbv->dbcv_flags & DBTF_MEDIA)
- {}
- else
- {
- str.Format(L"U盘 盘符为 %c 被拔除",this->FirstDriveFormMask(pbv->dbcv_unitmask));
- this->m_list.DeleteAllItems();
- }
- }
- }
- }
- return CDialog::WindowProc(message,wParam,lParam);
- }