MFC入門教程之控件(7)設備自動檢測ondevicechange的添加和使用

MFC入門學習(1)瞭解MFC

 

源文檔<http://blog.csdn.net/codectq/article/details/19131227>

 

MFC入門學習之控件(2)創建一個對話框窗口並在運行時顯示

 

源文檔<http://blog.csdn.net/codectq/article/details/19131289>

 

MFC入門學習之控件(3)標籤控件Tab Control的添加和使用

 

源文檔<http://blog.csdn.net/codectq/article/details/19131553>

 

MFC入門學習之控件(4)標籤控件List Control的添加和使用(上)

 

源文檔<http://blog.csdn.net/codectq/article/details/19176595>

 

MFC入門學習之控件(5)標籤控件List Control的添加和使用(中)

 

源文檔<http://blog.csdn.net/codectq/article/details/19204165>

 

MFC入門學習之控件(6)標籤控件List Control的添加和使用(下)

 

源文檔<http://blog.csdn.net/codectq/article/details/23550465


在對話框初始化過程中將設備通知消息註冊到winproc中

//Register to receive notification when a USB device is plugged in.

broadcastInterface.dbcc_size =sizeof(DEV_BROADCAST_DEVICEINTERFACE);

broadcastInterface.dbcc_devicetype =DBT_DEVTYP_DEVICEINTERFACE;

 

memcpy( &(broadcastInterface.dbcc_classguid),

&(GUID_CLASS_USB_DEVICE),

sizeof(struct _GUID));

 

gNotifyDevHandle = RegisterDeviceNotification(hwnd,

&broadcastInterface,

DEVICE_NOTIFY_WINDOW_HANDLE);

 

// Now register for Hub notifications.

memcpy( &(broadcastInterface.dbcc_classguid),

&(GUID_CLASS_USBHUB),

sizeof(struct _GUID));

 

gNotifyHubHandle = RegisterDeviceNotification(hwnd,

&broadcastInterface,

DEVICE_NOTIFY_WINDOW_HANDLE);

 

 編寫設備狀態變化時的狀態解析函數:

 

OnDeviceChange(UINTnEventType, DWORD dwData)

{

PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)dwData;

char cDrive;

TRACE("OnDeviceChange: %u\n",nEventType);

switch(nEventType)

{

case DBT_DEVICEARRIVAL:

TRACE("OnDeviceChange: DBT_DEVICEARRIVAL\n");

if(DBT_DEVTYP_VOLUME == lpdb->dbch_devicetype)

{

 

 

 

 

//Logical volume has been inserted and becomes available

PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;

if(0 == lpdbv->dbcv_flags)

{

cDrive = FirstDriveFromMask(lpdbv->dbcv_unitmask);

RemovableDiskArrival(cDrive);

}

}

break;

case DBT_DEVICEQUERYREMOVE:

break;

case DBT_DEVICEQUERYREMOVEFAILED:

break;

case DBT_DEVICEREMOVEPENDING:

break;

case DBT_DEVICEREMOVECOMPLETE:

TRACE("OnDeviceChange:DBT_DEVICEREMOVECOMPLETE\n");

if(DBT_DEVTYP_VOLUME == lpdb->dbch_devicetype)

{

//Logical volume has been physically removed

PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;

if(0 == lpdbv->dbcv_flags)

{

 

 

 

 

 

TRACE("OnDeviceChange: DBT_DEVICEREMOVECOMPLETERefreshTree\n");

cDrive = FirstDriveFromMask(lpdbv->dbcv_unitmask);

RemovableDiskRemove(cDrive);

 

 

 

 

}

}

 

break;

case DBT_DEVICETYPESPECIFIC:

break;

case DBT_CONFIGCHANGED:

break;

case DBT_DEVNODES_CHANGED:

break;

}

 

return TRUE;

}

 

 將消息添加到消息map表中

BEGIN_MESSAGE_MAP(CAutoDownDlg,CDialog)

ON_WM_DEVICECHANGE()

END_MESSAGE_MAP()

發佈了104 篇原創文章 · 獲贊 166 · 訪問量 64萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章