周立功一套USB开发套件中提供的一个示例VC工程工程中引入了一个DLL,
在主程序 中看到下面的一愕嘎消息处理函数:
      afx_msg BOOL OnDeviceChange( UINT nEventType, DWORD dwData );      BOOL CTimeAndKeyDlg::OnDeviceChange( UINT nEventType, DWORD dwData )
      {
        ……
      }
搜索了,工程中再没有相关DeviceChange的任何其他东西,
它是由谁怎么调用呢?
【暂时没有硬件,无法跳入这个函数】是不是可能在DLL中SendMessage()调用呢?
 SendMessage应该怎么写呢?

解决方案 »

  1.   

    它由窗口收到WM_DEVICECHANGE消息后调用,比如插入u盘
      

  2.   

    你是说它是标准的Windows消息?
      

  3.   

    如果上面的回答是“是”,那么我再问一个问题:如果定义了一个自己的消息处理函数:
    afx_msg bool OnABC();
    怎样用SendMessage调用它?
     
    使用
    ::SendMessage(this->GetSafeHwnd(),WM_ABC);
    不行啊!
      

  4.   

    喔好像还要MessageMap的,在哪儿添加的来着?
      

  5.   

    ft啊,
          BOOL CTimeAndKeyDlg::OnDeviceChange( UINT nEventType, DWORD dwData )
          {
            ……
          }
    也是个函数啊,直接调用即可:
    dlg.OnDeviceChange(……, ……);
      

  6.   

    楼上的别急着ft好不好?看清afx_msg 了吗?!
      

  7.   

    搞清楚了,它的确是一个标准的 隐藏的 Windows消息。你自己在程序里也可以捕获到这个消息的。afx_msg BOOL OnDeviceChange( UINT nEventType, DWORD dwData );BOOL CMydemoDlg::OnDeviceChange( UINT nEventType, DWORD dwData )
    {
    MessageBox("Catched DeviceChange Message");
    }然后添加消息影射。在CMydemoDlg.cpp文件的开头那一段里面:
    BEGIN_MESSAGE_MAP(CMydemoDlg, CDialog)
    //{{AFX_MSG_MAP(CISP1581_demoDlg)
    ……
    //}}AFX_MSG_MAP
    ON_WM_DEVICECHANGE()                   //加到这里!注意位置!
    END_MESSAGE_MAP()