苦瓜3

博客园 首页 新随笔 联系 订阅 管理

-----------------------------------------------------------‘接收窗体’代码.cs------------------------------------------------------------ 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    /// <summary>
    /// 接收窗体
    /// </summary>
    public partial class ReceiveForm : Form
    {
        SendForm sendForm;
        public ReceiveForm()
        {
            InitializeComponent();
            sendForm = new SendForm(this.Handle);
            sendForm.Show();
        }
        
        public const int USER = 0x500;
        /// <summary>
        /// 自定义消息
        /// </summary>
        public const int MYMESSAGE = 0x500 + 1;

        /// <summary>
        /// 重写窗体的消息处理函数DefWndProc,从中加入自己定义消息 MYMESSAGE 的检测的处理入口
        /// </summary>
        /// <param name="m"></param>
        protected override void DefWndProc(ref Message m)
        {
            switch (m.Msg)
            {
                //接收自定义消息MYMESSAGE,并显示其参数
                case MYMESSAGE:
                    SENDDATASTRUCT myData = new SENDDATASTRUCT();//这是创建自定义信息的结构
                    Type mytype = myData.GetType();
                    myData = (SENDDATASTRUCT)m.GetLParam(mytype);//这里获取的就是作为LParam参数发送来的信息的结构
                    textBox1.Text = myData.lpData; //显示收到的自定义信息
                    break;
                default:
                    base.DefWndProc(ref m);
                    break;
            }
        }
    }
}

 

-----------------------------------------------------------‘接收窗体’代码.Desiger.cs------------------------------------------------------------ 

namespace WindowsFormsApplication2
{
    /// <summary>
    /// 接收窗体
    /// </summary>
    partial class ReceiveForm
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(30, 72);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(189, 21);
            this.textBox1.TabIndex = 0;
            // 
            // ReceiveForm
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(270, 174);
            this.Controls.Add(this.textBox1);
            this.Name = "ReceiveForm";
            this.Text = "ReceiveForm";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        public System.Windows.Forms.TextBox textBox1;
    }
}

 

-----------------------------------------------------------’发送窗体‘代码.cs------------------------------------------------------------ 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication2
{
    /// <summary>
    /// 发送窗体
    /// </summary>
    public partial class SendForm : Form
    {
        public SendForm()
        {
            InitializeComponent();
        }
        public SendForm(IntPtr Handle)
        {
            SendToHandle = Handle;
            InitializeComponent();
        }
        /// <summary>
        /// 接收窗口的句柄
        /// </summary>
        private IntPtr SendToHandle;
        public const int USER = 0x500;
        /// <summary>
        /// 自定义的消息ID
        /// </summary>
        public const int MYMESSAGE = USER + 1;

        /// <summary>
        ///消息发送API
        /// </summary>
        /// <param name="hWnd">信息发往的窗口的句柄</param>
        /// <param name="Msg">消息ID</param>
        /// <param name="wParam">貌似没用</param>
        /// <param name="lParam">传输的数据参数</param>
        /// <returns></returns>
        [DllImport("User32.dll", EntryPoint = "SendMessage")]
        private static extern int SendMessage(
        IntPtr hWnd,        // 信息发往的窗口的句柄
        int Msg,            // 消息ID
        int wParam,         // 参数1
        ref SENDDATASTRUCT lParam // 参数2   [MarshalAs(UnmanagedType.LPTStr)]StringBuilder lParam
        );
        /// <summary>
        /// 发送消息 调用SendMessage API
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Send_Click(object sender, EventArgs e)
        {
            string myText = textBox1.Text;
            SENDDATASTRUCT myData = new SENDDATASTRUCT();
            myData.lpData = myText;
            SendMessage(SendToHandle, MYMESSAGE, 100, ref myData);//发送自定义消息给句柄为SendToHandle 的窗口,
        }



    }
}

 

-----------------------------------------------------------’发送窗体‘代码.Desiger.cs------------------------------------------------------------ 

namespace WindowsFormsApplication2
{
    /// <summary>
    /// 发送窗体
    /// </summary>
    partial class SendForm
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows 窗体设计器生成的代码

        /// <summary>
        /// 设计器支持所需的方法 - 不要
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.Send = new System.Windows.Forms.Button();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            // 
            // Send
            // 
            this.Send.Location = new System.Drawing.Point(299, 69);
            this.Send.Name = "Send";
            this.Send.Size = new System.Drawing.Size(75, 23);
            this.Send.TabIndex = 0;
            this.Send.Text = "Send";
            this.Send.UseVisualStyleBackColor = true;
            this.Send.Click += new System.EventHandler(this.Send_Click);
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(48, 71);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(228, 21);
            this.textBox1.TabIndex = 1;
            // 
            // SendForm
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(415, 166);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.Send);
            this.Name = "SendForm";
            this.Text = "SendForm";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.Button Send;
        private System.Windows.Forms.TextBox textBox1;
    }
}

 

 

-----------------------------------------------------------’程序入口‘代码------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new ReceiveForm());
        }
    }
}

 
------------------------------------总结----------------------------------------------------------------
1)  在发送窗体 调用API方法发送
2)  在接收窗体 重写窗体的消息处理函数DefWndProc  在m参数里面取出传过来的值

 

posted on 2013-11-19 16:44  苦瓜3  阅读(954)  评论(0编辑  收藏  举报