• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
VC6下利用消息实现内部进程通讯
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
VC6下利用消息实现内部进程通讯
软件发布 VC6下利用消息实现内部进程通讯
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 文章首页 >> 编程技术 >> VC教程 >> VC6下利用消息实现内部进程通讯

VC6下利用消息实现内部进程通讯

添加时间: 2006-2-11 0:36:38  作者: VC教程  阅读次数:157   来源: http://www.d9soft.com

       

  Windows是一种面向对象的体系结构,Windows环境和应用程序都是通过消息来交互的。Windows应用程序开始执行后,Windows为该程序创建一个“消息队列(message queue)”,用以存放邮寄给该程序可能创建的各种不同窗口的消息。消息队列中消息的结构(MSG)为: 

  typedef struct tagMSG{

   HWND hwnd;

   UINT message;

   WPARAM wParam;

   LPARAM lParam;

   DWORD time;

   POINT pt;

  }MSG;

  其中第一个成员变量是用以标识接收消息的窗口的窗口句柄;第二个参数便是消息标识号,如WM_PAINT;第三个和第四个参数的具体意义同message值有关,均为消息参数。前四个参数是非常重要和经常用到的,至于后两个参数则分别表示邮寄消息的时间和光标位置(屏幕坐标)。

  把消息传送到应用程序有两种方法:一种是由系统将消息“邮寄(post)”到应用程序的“消息队列”这是“进队消息”Win32 API有对应的函数:PostMessage(),此函数不等待该消息处理完就返回;而另一种则是由系统在直接调用窗口函数时将消息“发送(send)”给应用程序的窗口函数,属于“不进队消息”对应的函数是SendMessage()其必须等待该消息处理完后方可返回。消息是在消息循环中被处理的,下面这段代码就是一个典型的消息循环:  

  MSG msg; //定义消息名

  while (GetMessage (&msg, NULL, 0, 0))

  {

   TranslateMessage (&msg) ; //翻译消息

   DispatchMessage (&msg) ; //撤去消息

  }

  return msg.wParam ;

  消息循环以GetMessage调用开始,它从消息队列中取出一个消息。该函数的四个参数可以有控制地获取消息,第一个参数指定要接收消息的MSG结构的地址,第二个参数表示窗口句柄,一般将其设置为空,表示要获取该应用程序创建的所有窗口的消息;第三、四参数用于指定消息范围。后面三个参数被设置为默认值,用于接收发送到属于这个应用程序的任何一个窗口的所有消息。在接收到除WM_QUIT之外的任何一个消息后,GetMessage()返回TRUE;如果GetMessage收到一个WM_QUIT消息,则返回FALSE以退出消息循环,终止程序运行。因此,在接收到WM_QUIT之前,带有GetMessage()的消息循环可以一直循环下去。

  当除WM_QUIT的消息用GetMessage读入后,首先要经过函数TranslateMessage()对其进行解释,但对大多数消息来说并不起什么作用。这里起关键作用的是DispatchMessage()函数,把由GetMessage获取的Windows消息传送给在MSG结构中为窗口所指定的窗口过程。在消息处理函数处理完消息之后,代码又循环到开始去接收另一个消息,这样就完成了一个完整的消息循环。
  本文将设计一个主控程序和一个底层工作程序,由主控程序通过消息来控制底层工作程序的工作状态。这里首先对主控程序的设计过程进行介绍:

  首先创建一个单文档工程,添加三个菜单“命令一”、“命令二”、“命令三”及与之对应的命令响应函数:  

  OnSendComm1()

  {

   CString str="Receiver";

   CWnd *pWnd=CWnd::FindWindow(NULL,str);

   if(pWnd)

    pWnd->SendMessage(WM_COMM,0,0);

  } 

  OnSendComm2()

  {

   CString str="Receiver";

   CWnd *pWnd=CWnd::FindWindow(NULL,str);

   if(pWnd)

    pWnd->SendMessage(WM_COMM,0,1);

  }

  OnSendComm3()

  {

   CString str="Receiver";

   CWnd *pWnd=CWnd::FindWindow(NULL,str);

   if(pWnd)

    pWnd->SendMessage(WM_COMM,1,0);

  }

  这里,WM_COMM是自定义消息,用于在主控程序和底层通信程序之间进行联系,为了能够使用该消息,必须首先添加预定义语句:  

  #define WM_COMM WM_USER + 100

  上述几个函数的结构没有什么区别,首先通过FindWindow()返回由str变量指定窗口标题的应用程序主窗口句柄并将其保存到pWnd。然后再通过该句柄调用SendMessage()函数并发送刚才定义的WM_COMM消息及其消息参数。如果函数被正确执行,底层程序将收到来发自主控程序的WM_COMM消息并可在消息响应函数中完成对消息参数的判断处理以及进一步的操作。

  本文将设计一个主控程序和一个底层工作程序,由主控程序通过消息来控制底层工作程序的工作状态。这里首先对主控程序的设计过程进行介绍:

  首先创建一个单文档工程,添加三个菜单“命令一”、“命令二”、“命令三”及与之对应的命令响应函数:  

  OnSendComm1()

  {

   CString str="Receiver";

   CWnd *pWnd=CWnd::FindWindow(NULL,str);

   if(pWnd)

    pWnd->SendMessage(WM_COMM,0,0);

  } 

  OnSendComm2()

  {

   CString str="Receiver";

   CWnd *pWnd=CWnd::FindWindow(NULL,str);

   if(pWnd)

    pWnd->SendMessage(WM_COMM,0,1);

  }

  OnSendComm3()

  {

   CString str="Receiver";

   CWnd *pWnd=CWnd::FindWindow(NULL,str);

   if(pWnd)

    pWnd->SendMessage(WM_COMM,1,0);

  }

  这里,WM_COMM是自定义消息,用于在主控程序和底层通信程序之间进行联系,为了能够使用该消息,必须首先添加预定义语句:  

  #define WM_COMM WM_USER + 100

  上述几个函数的结构没有什么区别,首先通过FindWindow()返回由str变量指定窗口标题的应用程序主窗口句柄并将其保存到pWnd。然后再通过该句柄调用SendMessage()函数并发送刚才定义的WM_COMM消息及其消息参数。如果函数被正确执行,底层程序将收到来发自主控程序的WM_COMM消息并可在消息响应函数中完成对消息参数的判断处理以及进一步的操作。

 

上下文章:

 

上一篇文章: VC内嵌资源实现Flash动画播放 下一篇文章: 利用VC#开发一个媒体播放器

相关文章:

  • 飞速在线看视频 傲盾加速帮你实现速度感受
  • 魔兽世界:如何更大限度的利用奥冲循环
  • 用端口碰撞技术实现服务器远程管理
  • 利用twig架设WebMail系统(一)
  • 利用twig架设WebMail系统(二)

相关软件:

  • 飞翔通讯录 3.3.808 网络版
  • KS保密通讯 1.1
  • Gaim即时通讯 V2.0.0 dev
  • 中华通讯录-注册机 v5_8 Build
  • 中华通讯录-注册机 v5.8 Build
  • 进程杀手 V2.8

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • VC++之Button控件
  • VC++之Static Box控件
  • VC++之Edit Box控件
  • VC++之Static Box控件
  • VC++之Edit Box控件
  • VC++之Scroll Bar
  • VC++之Scroll Bar
  • VC++之List Box/Check List Box控...
  • VC++ Combo Box/Combo Box Ex控件
  • VC++ List Ctrl控件

VC教程阅读排行

  • VC++之List Box/Check List Box控...
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • VC++之Button控件
  • VC++之Tab Ctrl控件
  • VC++之Edit Box控件
  • VC++之Edit Box控件
  • VC遍历整个目录树查找文件
  • VC++之Scroll Bar
  • 深入编程:控制面板知多少?

编程技术阅读总排行

  • VB入门教程之一
  • Java连接数据库实例
  • 第二章 PowerBuilder 入门之创建新...
  • VC++之List Box/Check List Box控...
  • 第一章 什么是PowerBuilder
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有