`
庚午子
  • 浏览: 14327 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

windows自定义消息通信机制

 
阅读更多

进程间通讯应该是老的内容了,相信用VC的大侠们都知道,书本上也都有介绍。我在这只是对自己用过的东西简单的总结一下,希望对有兴趣者有帮助。

WINDOWS中进程间通讯的方式很多,如:消息机制,共享内存机制,SOCKET,COM,RPC等等,需要时可以根据具体情况来选择使用的方式。我在这本文中仅介绍进程间的自定义消息通讯机制。
 
1,WINDOWS中自定义消息的定义和使用;

在WNDOWS中消息分系统消息和自定义消息。系统消息定义从0到0x3FF,使用0x400到0x7FFF定义自己的消息。
Windows把0x400定义为WM_USER。如果想定义自己的一个消息,可以在WM_USER上加上一个值:

#define WM_CONTROLPRINT WM_USER+1001

另一种自定义窗口消息的方法是用RegisterWindowsMessage()函数来注册这个消息。与在WM_USER上加上某个数相比,它的好处是不必考虑所表示的消息标识符是否超出工程的允许范围。如:

const UINT WM_CONTROLPRINT=RegisterWindowMessage("reg_data");

在接收消息的程序中,需要对添加对应消息的响应处理函数,并将消息和消息处理函数关联,要不它不知道消息发给谁:

//函数定义,在//AFX_MSG中
afx_msg LRESULT OnControlPrint(WPARAM wParam,LPARAM lParam);

//函数实现
LRESULT CSendDlg::OnControlPrint(WPARAM wParam,LPARAM lParam)
{
}

//关联映射,在BEGIN_MESSAGE_MAP中
ON_MESSAGE(WM_CONTROLPRINT,OnControlPrint)//使用WM_USER+1001定义的消息
ON_REGISTERED_MESSAGE(WM_CONTROLPRINT,OnControlPrint)//使用RegisterWindowMessage定义的消息

消息如何传递呢?我们需要发送消息时,可以使用PostMessage和SendMessage。这两个消息发送函数不一样的地方就是SendMessage发送完消息后会等待消息处理函数处理完成后返回,PostMessage则不等待。所以,可以说PostMessage是不可靠的,实际运用中可以根据具体情况来确定用那一个。这两个函数的具体使用请查看MSDN。

如我向主窗体发送一个消息(第一个参数是接收消息的窗体句柄,第二个参数是要发送的消息,后边两个为随消息发送的参数信息):
::SendMessage(AfxGetApp()->GetMainWnd()->m_hWnd,WM_CONTROLPRINT,NULL,0);


2,使用自定义消息在进程间通讯;

我们可以用VC60建立两个基于对话框的工程,一个命名为Send,一个命名为Revice。

在Send对话框中添加一个名成为IDC_BUTTONSEND的按钮。

在SendDlg.h和ReviceDlg.g中都添加自定义消息。消息实现进程间通信,需要在这两个程序中定义或注册相同的消息,才能保证数据通信顺利进行:

#define WM_CONTROLPRINT WM_USER+1001

在Send工程中添加IDC_BUTTONSEND按钮的单击处理事件,并添加代码:

void CSendDlg::OnButtonsend()

{

//获取窗口句柄
CWnd *pWnd=CWnd::FindWindow(NULL,_T("Revice")); 
if(pWnd==NULL)
{
AfxMessageBox("接收程序没有运行!");
return ;
}

//发送消息
pWnd->SendMessage(WM_SENDYKDISABLE,NULL,0);
}

在Revice工程中添加WM_CONTROLPRINT 的处理函数,关联映射,和上边描述的过程一样,在处理函数中添加相应的处理代码。

分享到:
评论

相关推荐

    论文研究-基于WindowsCE.NET的串口通信及应用 .pdf

    基于WindowsCE.NET的串口通信及应用,李渊博,,针对嵌入式系统对实时性的要求和硬件资源有限的特点,应用多线程技术和自定义消息机制,结合WindowsCE.NET串口的同步通信方式,用Embed

    Windows应用程序捆绑核心编程光盘代码

    3.3.1 通过自定义消息实现进程间通信的方法 57 3.3.2 通过自定义消息实现进程间通信的实例 58 3.4 使用WM_COPYDATA消息通信 60 3.4.1 通过WM_COPYDATA消息实现进程间通信的方法 60 3.4.2 通过WM_COPYDATA消息...

    windows 串口类

    此类主要使用 windows的底层API函数来对串口进行了封装,用于串口通信,非阻塞模式,用户在使用此类时可选择使用消息机制或直接访问的方式和应用程序交互,对用用户只需要实现用户自定义的消息和调用串口类的public ...

    QWidget中进程间通信

    1.使用Windows消息机制 ::SendMessage process1发送消息,process2接受消息 2.使用内存共享 QSharedMemory sharedmemory发送QImage到内存 3.使用共享内存 QSharedMemory 数据类型为自定义结构体 sendMemory发送数据...

    python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍

    信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方。 在linux、windows等 GUI 工具包中,GUI组件都会注册回调函数用于处理组件所触发的动作,通常是注册对应...

    windows驱动开发技术详解-part2

    要介绍Windows操作系统内核的基本概念,同时还介绍应用程序和驱动程序之间的通信方法。  2.1 Windows操作系统概述  2.1.1 Windows家族  2.1.2 Windows特性  2.1.3 用户模式和内核模式  2.1.4 操作系统与...

    qt必备学习手册初级

    4.5.3 自定义消息框 31 4.5.4 消息对话框 33 4.5.5 标准文件对话框 36 4.6 常用控件 39 4.6.1 QLabel控件使用 39 4.6.2 QLineEdit 41 4.6.3 其他控件 43 4.7 布局管理器 43 4.7.1 水平/垂直/网格布局 44 4.7.2 ...

    .Net最流行的开源企业服务总线 NServiceBus.zip

    7、支持广泛的消息传输技术提供了MSMQ, RabbitMQ, SQL Server, Windows Azure Queues,Windows AzureService Bus消息传输机制,当然你也可以自定义或者选择由社区开发的消息传输方案。NServicebus官方地址:...

    vc.rar_9-12 VC_MFC与网络通信_mfc activex_vc dll_vc 生成 dll 文件

    第4课 第4课 MFC消息映射机制的剖析 讲述如何运用ClassWizard 8 第5课 文本编程 11 第6课 菜单编程 15 第7课 对话框用户界面程序的编写 21 第8课 逃跑按钮的巧妙实现 23 第9课 如何修改MFC AppWizard向导生成的框架...

    Windows驱动开发技术详解的光盘-part1

    本章主要介绍Windows操作系统内核的基本概念,同时还介绍应用程序和驱动程序之间的通信方法。  2.1 Windows操作系统概述  2.1.1 Windows家族  2.1.2 Windows特性  2.1.3 用户模式和内核模式  2.1.4 操作...

    多任务TDCS车站分机通信协议的设计

    在多任务程序中,使用消息机制和消息缓冲区实现多线程之间的通信,使用信号量和互斥量实现多线程之间的同步;针对以太网通信任务和串口通信任务,建立了相应的数据结构,并设计了一个数据包分析算法来解析自定义协议...

    C++MFC教程

    |------ 1.2 理解Windows消息机制 |------ 1.3 利用Visual C++/MFC开发Windows程序的优势 |------ 1.4 利用MFC进行开发的通用方法介绍 |------ 1.5 MFC中常用类,宏,函数介绍 +-- 第二章 图形输出 |------ 2.1 和...

    Visual C++2010开发权威指南(共三部分).part1.rar

    2.2.4 消息机制与消息循环 59 2.3 文档与视图 65 2.3.1 文档类结构分析 65 2.3.2 视图类结构分析 65 2.3.3 文档与视图的关系 67 2.3.4 sdi应用程序分析 69 2.3.5 mdi应用程序分析 69 2.4 工具栏与状态栏 69 2.4.1 ...

    Visual C++ MFC扩展编程实例.PDF

    1.12 类的消息机制 18 1.12.1 MFC如何接收一个寄送消息 18 1.12.2 MFC如何处理接收的消息 18 1.12.3 UI对象 20 1.13 小 结 20 第2章 控制条 21 2.1 通用控制条 21 2.2 用API创建控制条 22 2.3 用MFC创建控制条 24 ...

    VISUAL C++MFC扩展编程实例

    1.12 类的消息机制 18 1.12.1 MFC如何接收一个寄送消息 18 1.12.2 MFC如何处理接收的消息 18 1.12.3 UI对象 20 1.13 小 结 20 第2章 控制条 21 2.1 通用控制条 21 2.2 用API创建控制条 22 2.3 用MFC创建控制条 24 ...

    Visual.C#2010从入门到精通

    第7章 MFC消息映射与消息传递机制 108 7.1 消息概述 108 7.1.1 队列消息和非队列消息 108 7.1.2 系统消息和应用程序消息 109 7.1.3 窗口消息、命令消息和控件通知 109 7.2 MFC消息映射机制 110 7.2.1 MFC消息处理 ...

    VISUAL C MFC扩展编程实例与源码

    1.12 类的消息机制 18 1.12.1 MFC如何接收一个寄送消息 18 1.12.2 MFC如何处理接收的消息 18 1.12.3 UI对象 20 1.13 小 结 20 第2章 控制条 21 2.1 通用控制条 21 2.2 用API创建控制条 22 2.3 用MFC创建控制...

    VISUAL C++MFC扩展编程实例(想学MFC的朋友一定不要错过)

    1.12 类的消息机制 18 1.12.1 MFC如何接收一个寄送消息 18 1.12.2 MFC如何处理接收的消息 18 1.12.3 UI对象 20 1.13 小 结 20 第2章 控制条 21 2.1 通用控制条 21 2.2 用API创建控制条 22 2.3 用MFC创建控制条 24 ...

    Visual C++ 2005入门经典.part08.rar (整理并添加所有书签)

    13.1 与Windows进行通信 13.1.1 了解消息映射 13.1.2 消息类别 13.1.3 处理程序中的消息 13.2 扩充Sketcher程序 13.3 菜单的元素 13.4 为菜单消息添加处理程序 13.4.1 选择处理菜单消息的类 13.4.2 创建菜单消息函数...

Global site tag (gtag.js) - Google Analytics