大侠,请问MFC中怎么扑捉串口端口消息事件 比如从主机中插入或拔出1个终端,怎么样得到扑捉这个事件? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢提示找到这个东东OnDeviceChange好像是捕捉这类事件的但是怎么用?谢谢了 我已经:1.在类声明处添加成员函数 protected: afx_msg BOOL OnDeviceChange( UINT nEventType, DWORD dwData );2.在相应的cpp文件中加入BOOL OnDeviceChange(UINT, DWORD)的函数体; BOOL CXXXXX::OnDeviceChange( UINT nEventType, DWORD dwData ) { }3。在消息映射宏中加入 BEGIN_MESSAGE_MAP(CXXXXXX, CDialog) //{{AFX_MSG_MAP(CTest031Dlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_WM_DEVICECHANGE() //此句为加入的映射,注意:一定要将这句加在两个AFX_MSG_MAP外 END_MESSAGE_MAP()但是还是不能响应消息,是不是在之前被什么函数处理掉了?另外“ ON_WM_DEVICECHANGE() //此句为加入的映射,注意:一定要将这句加在两个AFX_MSG_MAP外”为什么要加到两个AFX_MSG_MAP外? 重载WndProc case WM_DEVICECHANGE: PDEV_BROADCAST_HDR lpdb; switch(wParam) //device-change event ; { case DBT_DEVICEARRIVAL: lpdb = (PDEV_BROADCAST_HDR) lParam; if (lpdb->dbch_devicetype == DBT_DEVTYP_PORT)// serial, parallel { // SD } if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME) // logical volume { //usb disk } //DBT_DEVTYP_NET // network resource break; case DBT_DEVICEREMOVECOMPLETE: // device is gone 0x8004 lpdb = (PDEV_BROADCAST_HDR) lParam; if (lpdb->dbch_devicetype == DBT_DEVTYP_PORT) { // } if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME) { //usb } break; } break; 求教superpixels算法! 各位兄弟帮我看看为什么我的PtInRect老是判断不成功呢? 头文件中定义的_RecordsetPtr对象怎么不可用? 函数产生中包含#if的问题 还是clw的问题,但是解决不了~~~~~~~~~~~~~~~~~~~~~~~~~` 快来,快来,帮我一个忙。 关于图画板的程序 类成员的列表提示信息怎么不会显示了? ==如何在windows下读取cmos内容?? 我用Win7+VC2012建立一个atl的工程,为什么编译的末尾总是提示注册不成功? MFC如何清空CList中存储的所有元素 CString 转 Utf-8
找到这个东东
OnDeviceChange好像是捕捉这类事件的但是怎么用?谢谢了
1.在类声明处添加成员函数
protected:
afx_msg BOOL OnDeviceChange( UINT nEventType, DWORD dwData );
2.在相应的cpp文件中加入BOOL OnDeviceChange(UINT, DWORD)的函数体;
BOOL CXXXXX::OnDeviceChange( UINT nEventType, DWORD dwData )
{
}
3。在消息映射宏中加入
BEGIN_MESSAGE_MAP(CXXXXXX, CDialog)
//{{AFX_MSG_MAP(CTest031Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_WM_DEVICECHANGE() //此句为加入的映射,注意:一定要将这句加在两个AFX_MSG_MAP外
END_MESSAGE_MAP()但是还是不能响应消息,是不是在之前被什么函数处理掉了?另外“ ON_WM_DEVICECHANGE() //此句为加入的映射,注意:一定要将这句加在两个AFX_MSG_MAP外”
为什么要加到两个AFX_MSG_MAP外?
case WM_DEVICECHANGE: PDEV_BROADCAST_HDR lpdb; switch(wParam) //device-change event ;
{
case DBT_DEVICEARRIVAL:
lpdb = (PDEV_BROADCAST_HDR) lParam;
if (lpdb->dbch_devicetype == DBT_DEVTYP_PORT)// serial, parallel
{ // SD
}
if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME) // logical volume
{ //usb disk
}
//DBT_DEVTYP_NET // network resource
break; case DBT_DEVICEREMOVECOMPLETE: // device is gone 0x8004
lpdb = (PDEV_BROADCAST_HDR) lParam;
if (lpdb->dbch_devicetype == DBT_DEVTYP_PORT)
{ //
}
if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
{ //usb
}
break; }
break;