lengshizai 2024-04-22 12:57 采纳率: 31.7%
浏览 12
已结题

C++重写sendmessage

请给出C++环境下sendmessage的源码及重写形式。合用即采纳。如代码文本过长,可附带代码下载链接。

  • 写回答

25条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-22 12:57
    关注
    获得0.30元问题酬金

    引自免费微信小程序:皆我百晓生

    在C++环境中,SendMessage()是一个Windows API函数,用于向指定窗口发送消息。其原生声明如下:

    LRESULT WINAPI SendMessage(
      _In_ HWND hWnd,
      _In_ UINT Msg,
      _In_ WPARAM wParam,
      _In_ LPARAM lParam
    );
    

    其中参数含义如下:

    • hWnd: 目标窗口的句柄。
    • Msg: 要发送的消息标识符(如WM_PAINT、WM_KEYDOWN等)。
    • wParam: 附加消息特定信息的32位值。
    • lParam: 附加消息特定信息的32位值。

    如果你需要重写SendMessage()以实现类似功能,可能是因为有特殊需求(如跨平台、自定义消息传递机制等)。以下是一个简单的C++类CustomMessageSender示例,它提供了一个SendCustomMessage()方法,模仿SendMessage()的基本行为,但不依赖于Windows API,仅作为内部消息传递机制:

    #include <map>
    #include <functional>
    
    class CustomWindow {
    public:
        using MessageHandler = std::function<void(WPARAM, LPARAM)>;
    
        void RegisterMessageHandler(UINT msgId, MessageHandler handler) {
            messageHandlers[msgId] = handler;
        }
    
        LRESULT SendCustomMessage(UINT msgId, WPARAM wParam, LPARAM lParam) {
            auto it = messageHandlers.find(msgId);
            if (it != messageHandlers.end()) {
                it->second(wParam, lParam);
                return 0; // 假设成功,返回0
            }
            return -1; // 没有找到处理函数,返回负数表示失败
        }
    
    private:
        std::map<UINT, MessageHandler> messageHandlers;
    };
    
    int main() {
        CustomWindow window;
    
        // 注册消息处理函数
        window.RegisterMessageHandler(1001, [](WPARAM wParam, LPARAM lParam) {
            // 处理消息的逻辑...
        });
    
        // 发送自定义消息
        window.SendCustomMessage(1001, 123, 456);
    
        return 0;
    }
    

    这段代码创建了一个名为CustomWindow的类,它包含一个消息处理器映射表,用于存储不同消息ID对应的处理函数。RegisterMessageHandler()用于注册消息处理函数,SendCustomMessage()用于向已注册的处理函数发送消息。这里的实现基于C++标准库,不依赖于任何特定操作系统API,因此具有较好的跨平台兼容性。

    请注意,这只是一个简化的示例,实际应用中可能需要根据具体需求进行扩展,例如添加线程同步、事件循环、消息队列等功能。此外,对于真正的跨进程或跨线程消息传递,通常仍需利用操作系统提供的相应机制(如Windows的消息队列、POSIX的套接字等)。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月30日
  • 创建了问题 4月22日

悬赏问题

  • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
  • ¥15 如何在arcgis中导出拓扑关系表
  • ¥15 处理数据集文本挖掘代码
  • ¥15 matlab2017
  • ¥15 在vxWorks下TCP/IP编程,总是connect()报错,连接服务器失败: errno = 0x41
  • ¥15 AnolisOs7.9如何安装 Qt_5.14.2的运行库
  • ¥20 求:怎么实现qt与pcie通信
  • ¥50 前后端数据顺序不一致问题,如何解决?(相关搜索:数据结构)
  • ¥15 基于蒙特卡罗法的中介效应点估计代码
  • ¥15 罗技G293和UE5.3