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()