• VC中添加WM_DEVICECHANGE消息(经典)


    在mfc添加WM_DEVICECHANGE不像添加WM_MOUSEMOVE(举例)等等那样直接鼠标点击之后就自动添加。当中是有封装WM_DEVICECHANGE消息的(CWnd::OnDeviceChange),括号里的东西就是msdn里面的东西,就是说CWnd是有这个函数的。

    在开发的时候,我们不得不手动添加,而不是用IDE的自动添加功能。所以如果不了解mfc的消息机制的话,看起来会比较晦涩。

    入主题。

    ①添加消息映射

    BEGIN_MESSAGE_MAP(CFileCopyDlg, CDialog)

    ……

    ON_WM_DEVICECHANGE()

    ……

    END_MESSAGE_MAP()

    ②在窗口类当中添加消息响应函数

    afx_msg BOOL OnDeviceChange(UINT nEventType,
        DWORD dwData);

    所有的消息响应函数都是afx_msg 开头的,而且被定义为空,按jjh的话应该是留着在后面有用的。

    ③定义这个函数

    BOOL CFileCopyDlg::OnDeviceChange(UINT nEventType,
            DWORD dwData)
    {
        DEV_BROADCAST_DEVICEINTERFACE * dbd =
            (DEV_BROADCAST_DEVICEINTERFACE*) dwData;

    //

    //这里进行信息匹配,比如guid等
        switch(nEventType)
        {
        case DBT_DEVICEARRIVAL:
            ::AfxMessageBox(TEXT("得到新的设备"),1,0);
            return TRUE;
        }
        return FALSE;
    }

    tips:其中nEventType就是WM_DEVICECHANGE消息的wParam参数,具体的值参考msdn,具体的含义直接查就好了。

    DBT_CONFIGCHANGECANCELED
    DBT_CONFIGCHANGED
    DBT_CUSTOMEVENT
    DBT_DEVICEARRIVAL
    DBT_DEVICEQUERYREMOVE
    DBT_DEVICEQUERYREMOVEFAILED
    DBT_DEVICEREMOVECOMPLETE
    DBT_DEVICEREMOVEPENDING
    DBT_DEVICETYPESPECIFIC
    DBT_DEVNODES_CHANGED
    DBT_QUERYCHANGECONFIG
    DBT_USERDEFINED

    KUGOU的将歌曲发送到移动设备这个功能,应该就是通过这个消息实现,不过他是把这个消息写入了dll。

    不过后来发现原来这个消息是系统给所有的程序发送的,当窗口失去焦点依然可以处理该消息,就想关机或者log off的时候会发送WM_QUERYENDSESSION消息一样。

  • 相关阅读:
    U盘出现大量乱码文件,并且不能彻底删除
    使用命令生成配置文件
    input只读属性readonly和disabled的区别
    将sublime添加到鼠标右键
    mysql-front导入数据失败:“在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符”
    typeof运算符
    react input 设置默认值
    时间格式转换
    去除字符串首尾空格
    ES6基础知识汇总
  • 原文地址:https://www.cnblogs.com/daoluanxiaozi/p/2230146.html
Copyright © 2020-2023  润新知