MFC USB detecting

文章目录

  • Step 1: 创建MFC程序
  • Step 2: 消息处理成员函数声明
  • Step 3: 添加一行消息映射:
  • Step 4: 添加其他函数和消息处理函数:
  • Step 5. 其他
    • 5.1 修改项目属性,改为使用多字节字符集
    • 5.2 MFCApplication1Dlg.cpp 增加头文件
    • 5.3 其他头文件
  • 使用 VS2017 运行结果示意图:

Step 1: 创建MFC程序

MFC USB detecting_第1张图片

Step 2: 消息处理成员函数声明

MFCApplication1Dlg.h 中添加一行:

class CMFCApplication1Dlg : public CDialogEx
{
// 构造
public:
	CMFCApplication1Dlg(CWnd* pParent = nullptr);	// 标准构造函数
	//LRESULT CU_disk_detection_scanningDlg::WindowProc(UINT message, WPARAM wparam, LPARAM lparam);

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_MFCAPPLICATION1_DIALOG };
#endif

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持
	LRESULT OnMyDeviceChange(WPARAM wParam, LPARAM lParam); /////!!! 添加的声明

Step 3: 添加一行消息映射:

在 MFCApplication1Dlg.cpp 文件中添加一行 ON_MESSAGE(WM_DEVICECHANGE, OnMyDeviceChange)

BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_MESSAGE(WM_DEVICECHANGE, OnMyDeviceChange) //// !!!! 添加的行
END_MESSAGE_MAP()

Step 4: 添加其他函数和消息处理函数:

在 MFCApplication1Dlg.cpp 中添加其他函数和消息处理函数:

char FirstDriveFromMask(ULONG unitmask)
{
	char i;
	for (i = 0; i < 26; ++i)
	{
		if (unitmask & 0x1)
			break;
		unitmask = unitmask >> 1;
	}
	return (i + 'A');
}

LRESULT CMFCApplication1Dlg::OnMyDeviceChange(WPARAM wParam, LPARAM lParam)
{
	PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
	switch (wParam)
	{
	case WM_DEVICECHANGE:
		break;
	case DBT_DEVICEARRIVAL://DBT_DEVICEARRIVAL,设备检测结束,并且可以使用
	{
		if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)//逻辑卷
		{
			PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
			switch (lpdbv->dbcv_flags)
			{
			case 0:                //U盘
			{
				std::string sPlugMsg("检测到U盘: [");
				sPlugMsg += FirstDriveFromMask(lpdbv->dbcv_unitmask);
				sPlugMsg += "] 插入!";

				SetDlgItemText(IDC_EDIT1, sPlugMsg.c_str());

			}
			break;
			case DBTF_MEDIA:    //光盘

				std::string sCDMsg("检测到光盘:[");
				sCDMsg += FirstDriveFromMask(lpdbv->dbcv_unitmask);
				sCDMsg += "] 插入!";

				SetDlgItemText(IDC_EDIT1, sCDMsg.c_str());
				break;
			}
		}
	}
	break;
	case DBT_DEVICEREMOVECOMPLETE://DBT_DEVICEREMOVECOMPLETE,设备卸载或者拔出
	{
		if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)//逻辑卷
		{
			PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
			switch (lpdbv->dbcv_flags)
			{
			case 0:                //U盘
			{
				std::string sUnplugMsg("检测到U盘: [");
				sUnplugMsg += FirstDriveFromMask(lpdbv->dbcv_unitmask);
				sUnplugMsg += "] 拔出!";

				SetDlgItemText(IDC_EDIT1, sUnplugMsg.c_str());

			}
			break;
			case DBTF_MEDIA:    //光盘

				std::string sCDMsg("检测到光盘:[");
				sCDMsg += FirstDriveFromMask(lpdbv->dbcv_unitmask);
				sCDMsg += "] 插入!";
				SetDlgItemText(IDC_EDIT1, sCDMsg.c_str());

				break;
			}
		}
	}
	break;
	}
	return 0;

}

Step 5. 其他

5.1 修改项目属性,改为使用多字节字符集

MFC USB detecting_第2张图片

5.2 MFCApplication1Dlg.cpp 增加头文件

#include 

5.3 其他头文件

#include
#include
#include  // 这个可能不需要加,对于MFC

*** 注意 CMFCApplication1Dlg 很可能要相应修改 !不是所有的项目都一样的名称***

使用 VS2017 运行结果示意图:

这个程序并不够完善,但是可以跑起来了。
MFC USB detecting_第3张图片

========================
MFC USB detecting_第4张图片

MFC USB detecting_第5张图片

你可能感兴趣的:(C++)