|
@@ -152,7 +152,7 @@ void CTestWizardToolDlg::DoDataExchange(CDataExchange* pDX)
|
|
|
BEGIN_MESSAGE_MAP(CTestWizardToolDlg, CDialog)
|
|
|
ON_WM_SYSCOMMAND()
|
|
|
ON_WM_PAINT()
|
|
|
- ON_WM_QUERYDRAGICON()
|
|
|
+ ON_WM_DEVICECHANGE()
|
|
|
ON_WM_QUERYDRAGICON()
|
|
|
//}}AFX_MSG_MAP
|
|
|
ON_WM_SIZE()
|
|
@@ -265,21 +265,44 @@ HCURSOR CTestWizardToolDlg::OnQueryDragIcon()
|
|
|
|
|
|
BOOL CTestWizardToolDlg::OnDeviceChange(UINT nEventType, DWORD_PTR dwData)
|
|
|
{
|
|
|
- switch (nEventType)
|
|
|
- {
|
|
|
- // 串口拨掉;
|
|
|
- case DBT_DEVICEREMOVECOMPLETE:
|
|
|
- break;
|
|
|
- // 串口插入;
|
|
|
- case DBT_DEVICEARRIVAL:
|
|
|
- {
|
|
|
- GetSysSerialPort(m_vtPorts);
|
|
|
- InitSerialCombobox();
|
|
|
- break;
|
|
|
- }
|
|
|
- default:
|
|
|
- break;
|
|
|
+ //DEV_BROADCAST_DEVICEINTERFACE* pdbd = (DEV_BROADCAST_DEVICEINTERFACE*)dwData;
|
|
|
+ DEV_BROADCAST_PORT *pbdp = (DEV_BROADCAST_PORT*)dwData;
|
|
|
+ if ( pbdp && _tcsstr(pbdp->dbcp_name, _T("COM")) )
|
|
|
+ {
|
|
|
+ // 查找是否有添加过该项;
|
|
|
+ int nIndex = m_cbCOM.FindString(0, pbdp->dbcp_name);
|
|
|
+ // 删除和新增前,先获取当前选中的项;
|
|
|
+ CString strCurCOM = _T("");
|
|
|
+ int nCurIndex = m_cbCOM.GetCurSel();
|
|
|
+ if ( nCurIndex != CB_ERR )
|
|
|
+ m_cbCOM.GetLBText(nCurIndex, strCurCOM);
|
|
|
+
|
|
|
+ if ( nEventType == DBT_DEVICEREMOVECOMPLETE )
|
|
|
+ {// 串口拨掉;
|
|
|
+ TRACE(_T("串口拨掉\n"));
|
|
|
+ if ( nIndex != CB_ERR )
|
|
|
+ {
|
|
|
+ m_cbCOM.DeleteString(nIndex);
|
|
|
+ // 删除后, 由于索引变化了,要重新设置选中项;
|
|
|
+ if ( nCurIndex != CB_ERR )
|
|
|
+ m_cbCOM.SelectString(0, strCurCOM);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if ( nEventType == DBT_DEVICEARRIVAL )
|
|
|
+ {// 串口插入;
|
|
|
+ TRACE(_T("串口插入\n"));
|
|
|
+ if ( nIndex == CB_ERR )
|
|
|
+ {
|
|
|
+ m_cbCOM.AddString(pbdp->dbcp_name);
|
|
|
+ // 新增后,由于索引变化了,要重新设置选中项;
|
|
|
+ if ( nCurIndex != CB_ERR )
|
|
|
+ m_cbCOM.SelectString(0, strCurCOM);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ TRACE(_T("OnDeviceChange\n"));
|
|
|
+
|
|
|
return TRUE;
|
|
|
}
|
|
|
|