zoukankan      html  css  js  c++  java
  • SDK_按键消息的拦截

    按键消息的拦截

    • 拦截是为了在原有功能的基础上增加自己的操作

    • 扩展:当按钮接收到点击消息的时候,响应的是WM_LBUTTONDOWN消息,按钮的会被这个消息打包成一个WM_COMMAND 消息发送给父窗口,父窗口接收到之后再进行处理

    • 关键函数 SetWindowLong SetClassLong

      • 区别在于一个修改的是一个窗口,一个会影响到所有使用这个窗口类的窗口

      // 保存旧的按钮回调
      WNDPROC OldButtonProc = nullptr;

      // 用于处理接管到的消息的回调函数
      LRESULT CALLBACK ButtonProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
      {
      switch (uMsg)
      {
      // 1. 按钮作为一个窗口,需要响应 LBUTTONDOWN
      case WM_LBUTTONDOWN:
      {
      // 还原回调函数
      SetWindowLong(hWnd, GWL_WNDPROC, (LONG)OldButtonProc);
      MessageBox(hWnd, L"设置的处理函数", L"WM_LBUTTONDOWN", MB_OK);

      // 获取父窗口(不是重点)
      // HWND hParent = GetParent(hWnd);
      // PostMessage(hParent, WM_COMMAND, IDC_BUTTON1, (LPARAM)hWnd);
      break;
      }
      }


      // 为了保持原有功能不变,应该返回原按钮的回调函数
      return OldButtonProc(hWnd, uMsg, wParam, lParam);
      }

      // 对话框回调函数
      INT_PTR CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
      {
      switch (uMsg)
      {
      // 响应按钮的点击,修改回调函数
      case WM_COMMAND:
      {
      // 1. 修改【窗口】的回调函数
      // 参数1: 想要设置的窗口句柄
      // 参数2: 想要设置的类型 GWL
      // 参数3: 要替换的内容
      // 返回值是修改之前的数据
      OldButtonProc = (WNDPROC)SetWindowLong(
      (HWND)lParam, GWL_WNDPROC, (LONG)ButtonProc);

      // 默认的响应
      MessageBox(hWnd, L"默认的处理函数", L"WM_COMMAND", MB_OK);
      break;
      }

      case WM_CLOSE:
      {
      // 销毁对话框
      EndDialog(hWnd, 0);
      break;
      }

      default:
      break;
      }

      return FALSE;
      }

       

    动态库

  • 相关阅读:
    解决Xcode升级7.0后,部分.a静态库在iOS9.0的模拟器上,link失败的问题
    2014年工作总结
    工作还是事业
    海豚社区阶段性开发总结
    Xcode开发和调试总结
    iOS证书深究
    何为分类,UIImageView举例
    UIWebView的探索
    SugarSync网盘之NSDateFormatter
    ASP.NET程序从IIS6移植到IIS7时出现500.22错误(转)
  • 原文地址:https://www.cnblogs.com/ltyandy/p/10910231.html
Copyright © 2011-2022 走看看