⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f_client.cs

📁 01_家庭视频监控系统 02_企业短信群发系统 03_企业电话客服系统 04_卡拉OK点歌系统 05_企业QQ系统
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using QQClass;
using System.Net;
using System.Net.Sockets;
using System.IO;


namespace MyQQClient
{
    public partial class F_Client : Form
    {
        ClassUsers users;
        ClassForms FormList = new ClassForms();

        public F_Client()
        {
            InitializeComponent();
        }
        class Win32API
        {
            [DllImport("User32.dll")]
            public static extern bool PtInRect(ref Rectangle r, Point p);
        }

        #region  使Label控件透明
        /// <summary>
        /// 使Label控件透明.
        /// </summary>
        public void Trans(Label lab, PictureBox pic)
        {
            lab.BackColor = Color.Transparent;
            lab.Parent = pic;
        }
        #endregion
        
        private void timer1_Tick(object sender, EventArgs e)
        {
            System.Drawing.Point  pp=new  Point(Cursor.Position.X,Cursor.Position.Y);//获取鼠标在屏幕的坐标点
            Rectangle Rects = new Rectangle(this.Left, this.Top, this.Left + this.Width, this.Top + this.Height);//存储当前窗体在屏幕的所在区域
            if ((this.Top < 0) && Win32API.PtInRect(ref Rects, pp))//当鼠标在当前窗体内,并且窗体的Top属性小于0
                this.Top = 0;//设置窗体的Top属性为0
            else
                //当窗体的上边框与屏幕的顶端的距离小于5时
                if (this.Top > -5 && this.Top < 5 && !(Win32API.PtInRect(ref Rects, pp)))
                    this.Top = 5 - this.Height;//将QQ窗体隐藏到屏幕的顶端

        }

        private void F_Client_Load(object sender, EventArgs e)
        {
            F_Logon FrmLogon = new F_Logon();   //创建并引用登录窗体
            if (FrmLogon.ShowDialog(this) == DialogResult.OK)   //当登窗体的对话框的返回值为OK时
            {
                FrmLogon.Dispose();
                udpSocket1.Active = true;
                label1.Text = Publec_Class.UserName;
                GetUserList();
            }
            else
            {
                FrmLogon.Dispose();
                Close();
            }
            Trans(label1, pictureBox1);
            Trans(label2, pictureBox1);
        }

        private void GetUserList()
        {
            ClassMsg msg = new ClassMsg();
            msg.sendKind = SendKind.SendCommand;
            msg.msgCommand = MsgCommand.UserList;
            udpSocket1.Send(IPAddress.Parse(Publec_Class.ServerIP), Convert.ToInt32(Publec_Class.ServerPort), new ClassSerializers().SerializeBinary(msg).ToArray());
        }


        private delegate void DataArrivaldelegate(byte[] Data, System.Net.IPAddress Ip, int Port);

        private void DataArrival(byte[] Data, System.Net.IPAddress Ip, int Port) //当有数据到达后的处理进程
        {
            try
            {
                ClassMsg msg = new ClassSerializers().DeSerializeBinary((new System.IO.MemoryStream(Data))) as ClassMsg;

                switch (msg.msgCommand)
                {
                    case  MsgCommand.UserList://获取用户列表
                        GetUserList(Data,Ip,Port);
                        break;
                    case  MsgCommand.SendToOne:
                        GetMsg(Data, Ip, Port);
                        break;
                    case MsgCommand.UpdateState:
                        UpdateState(Data,Ip,Port);
                        break;

                }
            }
            catch { }
        }

        private void udpSocket1_DataArrival(byte[] Data, System.Net.IPAddress Ip, int Port)
        {
            DataArrivaldelegate outdelegate = new DataArrivaldelegate(DataArrival);
            this.BeginInvoke(outdelegate, new object[] { Data, Ip, Port });
        }

        private void GetUserList(byte[] Data, System.Net.IPAddress Ip, int Port)
        {
            ClassMsg msg = (ClassMsg)new ClassSerializers().DeSerializeBinary(new MemoryStream(Data));
            users = (ClassUsers)new ClassSerializers().DeSerializeBinary(new MemoryStream(msg.Data));   //获取所有用户信息
            treeView1.Nodes.Clear();  //清空所有节点          
            for (int i = 0; i < users.Count; i++)//遍历所有用户
            {
                ClassUserInfo userItem = users[i];
                TreeNode Node = new TreeNode();
                Node.Text = userItem.UserName;//获取当前用户的名称
                Node.Tag = userItem;
                if (userItem.State == Convert.ToString((int)MsgCommand.Logined))    //当用户为上线状态
                {
                    Node.ImageIndex = 1;//设置上线用户的图片
                    Node.SelectedImageIndex = 1;
                }
                else
                {
                    Node.ImageIndex = 0;//设置下线用户的图片
                    Node.SelectedImageIndex = 0;
                }
                treeView1.Nodes.Add(Node);
            }
        }

        private void GetMsg(byte[] Data, System.Net.IPAddress Ip, int Port)
        {
            ClassMsg msg = (ClassMsg)new ClassSerializers().DeSerializeBinary(new MemoryStream(Data));
            string sid = msg.SID;//发送方用户ID
            string msgid = msg.msgID;//消息标识,GUID
            
            switch (msg.sendKind)
            {
                case SendKind.SendMsg://发送的消息
                    {
                        switch (msg.sendState)  //消息发送的状态
                        {
                            case SendState.Single://容量小的单消息
                                {
                                    String rtf = Encoding.Unicode.GetString(msg.Data);//获取发送信息
                                    Form msgform = null;    //定义一个窗体
                                    for (int i = 0; i < treeView1.Nodes.Count; i++)//在treeView1控件中遍历节点
                                    {
                                        if ((treeView1.Nodes[i].Tag as ClassUserInfo).UserID == sid)//如果当前节点的Tag值为发送信息的用户ID
                                        {
                                            msgform = FindForm(treeView1.Nodes[i]);//查找相关窗体信息
                                            if (msgform != null)
                                            {
                                                (msgform as F_Chat).Rich_Out.SelectionStart = 0;//将光标定位到RichTextBox控件的起始位
                                                (msgform as F_Chat).Rich_Out.AppendText((treeView1.Nodes[i].Tag as ClassUserInfo).UserName);//将发送方的名称添加到RichTextBox控件中
                                                (msgform as F_Chat).Rich_Out.AppendText("  " + DateTime.Now.ToString());//将发送时间添加到RichTextBox控件中
                                                (msgform as F_Chat).Rich_Out.AppendText("\r\n");//回车
                                                (msgform as F_Chat).Rich_Out.SelectedRtf = rtf;//添加发送的信息
                                                msgform.Text = "与" + (treeView1.Nodes[i].Tag as ClassUserInfo).UserName + "对话";
                                                msgform.Activate();//激活窗体
                                            }
                                            else
                                            {
                                                msgform = new F_Chat(); //创建并引用消信发送窗体
                                                msgform.Tag = treeView1.Nodes[i];//设置远程客户端的ID号
                                                (msgform as F_Chat).udpsocket = udpSocket1; //获取udpSocket1控件的所有信息
                                                FormList.add(msgform);//将当前窗体信息添加到窗体列表中
                                                (msgform as F_Chat).FormList = FormList;
                                                (msgform as F_Chat).Rich_Out.SelectionStart = 0;
                                                (msgform as F_Chat).Rich_Out.AppendText(

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -