QQ主窗体代码

这里面我们首先需要拉一个第三方控件:sidebar控件,然都在拉一些声音源到bin下面的Debug

在进行代码编写

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using Aptech.UI;
using System.Media;//引入声音命名空间
namespace MyQQ
{
    public partial class MainFrm : Form
    {
        public MainFrm()
        {
            InitializeComponent();
        }
        //改变QQ登录的状态
        private void MainFrm_FormClosed(object sender, FormClosedEventArgs e)
        {
            LoginState();
        }
        //得到登陆者的信息
        public void GetSelf()
        {
            string sql = string.Format("select FaceId,NickName from users where Id = {0}", LoginHelper.fromQQ);
            SqlCommand cmd = new SqlCommand(sql, DbHelper.conn);
            SqlDataReader reader = null;
            try
            {
                DbHelper.opendb();
                reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    this.picFace.Image = this.imageFace.Images[Convert.ToInt32(reader[0])];
                    this.lblNickName.Text = Convert.ToString(reader[1]) + "(" + LoginHelper.fromQQ + ")";
                }
                this.Text = LoginHelper.fromQQ.ToString();
                reader.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                DbHelper.closedb();
            }
        }
        //窗体加载时(调用所显示的内容的方法)
        private void MainFrm_Load(object sender, EventArgs e)
        {
            GetSelf();
            this.sideBar.AddGroup("我的好友");
            this.sideBar.AddGroup("陌生人");
            GetFriends();
        }
        //主窗体信息
        public void GetFriends()
        {
            this.sideBar.Groups[0].Items.Clear();
            string sql = string.Format(@"select Users.Id,Users.NickName,Users.FaceId 
                                        from Friends inner join Users
                                        on Friends.FriendId = Users.Id 
                                        where HostId = {0}",LoginHelper.fromQQ);
            SqlCommand cmd = new SqlCommand (sql,DbHelper.conn);
            SqlDataReader reader = null;
            try 
	        {	        
		        DbHelper.opendb();
                reader = cmd.ExecuteReader();
                while(reader.Read())
                {
                    SbItem sidebar =new SbItem (reader[1].ToString(),Convert.ToInt32(reader[2]));
                    sidebar.Tag = Convert.ToInt32(reader[0]);
                    this.sideBar.Groups[0].Items.Add(sidebar);
                }
                reader.Close();
	        }
	        catch (Exception ex)
	        {
                MessageBox.Show(ex.ToString());
	        }finally
            {
                DbHelper.closedb();
            }
        }
        //点击查找添加好友显示查找/添加好友窗体
        private void tsbSearchFriends_Click(object sender, EventArgs e)
        {
            SearchFrm sf = new SearchFrm();
            sf.ShowDialog();
        }
        //通过个人信息窗体控制主窗体上面的信息
        public void SetNickNameFaceId(string NickName, int faceId)
        { 
            this.lblNickName.Text = NickName + "("+LoginHelper.fromQQ.ToString()+")";
            this.picFace.Image = this.imageFace.Images[faceId];
        }
        //点击编辑个人信息显示编辑个人信息窗体(调用通过个人信息窗体控制主窗体的上面的主要信息的方法)
        private void tsbEdiPersonalInformaion_Click(object sender, EventArgs e)
        {
            PersonalFrm pf = new PersonalFrm();
            pf.mf =  this;
            pf.ShowDialog();
        }
        int fromQQ = 0;//发过来消息的QQ号。
        int faceid = 0;//发过来消息的QQ头像。

        //获取QQ号
        public bool hasFriends(int fromQQ)
        {
            for (int i = 0; i < this.sideBar.Groups.Count; i++)
            {
                for (int j = 0; j < this.sideBar.Groups[i].Items.Count; j++)
                {
                    if (Convert.ToInt32(this.sideBar.Groups[i].Items[j].Tag) == fromQQ)
                    {
                        return true;
                    }
                }
            }
            return false;
        }
        //添加陌生人为好友
        public void AddStrangeness(int fromQQ)
        {
            string sql = string.Format("select NickName,FaceId from Users where Id = {0}", fromQQ);
            SqlCommand cmd = new SqlCommand(sql,DbHelper.conn);
            SqlDataReader reader = null;
            try
            {
                DbHelper.opendb();
                reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    SbItem item = new SbItem(reader[0].ToString(), Convert.ToInt32(reader[1]));
                    item.Tag = fromQQ;
                    this.sideBar.Groups[1].Items.Add(item);
                    this.sideBar.VisibleGroup = this.sideBar.Groups[1];
                }
                reader.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                DbHelper.closedb();
            }
        }
        //使用time每两秒获取数据库里面的信息对其进行判断
        private void timer_Tick(object sender, EventArgs e)
        {
            GetFriends();
            int messageTypeId = 0;//消息类型
            int messageState = 0;//消息状态
            string sql = string.Format("select top 1  FromUserId,MessageTypeId,MessageState from Messages where MessageState = 0 and ToUserId = {0}", LoginHelper.fromQQ);
            SqlCommand cmd = new SqlCommand(sql, DbHelper.conn); 
            SqlDataReader reader = null;
            try
            {
                DbHelper.opendb();
                reader = cmd.ExecuteReader();
                if(reader.Read())
                {
                    this.fromQQ = Convert.ToInt32(reader[0]);
                    messageTypeId = Convert.ToInt32(reader[1]);
                    messageState = Convert.ToInt32(reader[2]);
                }
                reader.Close();
                if (messageTypeId == 2 && messageState == 0)
                {//未读的添加消息,让消息喇叭闪烁。
                    this.timerAddFriends.Enabled = true;
                    SoundPlayer player = new SoundPlayer("system.wav");
                    player.Play();
                }
                else if (messageTypeId == 1 && messageState == 0)
                {//未读的聊天消息,让头像闪烁。
                    SoundPlayer player = new SoundPlayer("msg.wav");
                    player.Play();
                    sql = string.Format("select FaceId from users where Id = {0}", this.fromQQ);
                    cmd.CommandText = sql;
                    cmd.Connection = DbHelper.conn;
                    this.faceid = Convert.ToInt32(cmd.ExecuteScalar());
                    if (hasFriends(fromQQ) == false)
                    {//添加陌生人,说明:sidebar控件中,没有头像
                        AddStrangeness(fromQQ);
                    }
                    //启动时间控件使头像闪烁
                    this.timerFlash.Enabled = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                DbHelper.closedb();
            }
        }
        //使用time控件对头像进行切换
        private void timerFlash_Tick(object sender, EventArgs e)
        {
            for (int i = 0; i < this.sideBar.Groups.Count; i++)
            {
                for (int j = 0; j < this.sideBar.Groups[i].Items.Count; j++)
                {
                    if (this.fromQQ == Convert.ToInt32(this.sideBar.Groups[i].Items[j].Tag))
                    {
                        if (this.sideBar.Groups[i].Items[j].ImageIndex < 100)
                        {
                            this.sideBar.Groups[i].Items[j].ImageIndex = 100;
                        }
                        else
                        {
                            this.sideBar.Groups[i].Items[j].ImageIndex = this.faceid;
                        }
                        this.sideBar.Invalidate();//重绘sideBar控件
                    }
                }
            }
        }
        //点击头像进行聊天
        public static ChatFrm cf;
        private void sideBar_ItemDoubleClick(SbItemEventArgs e)
        {
            //保存对方QQ号
            int fromQQ = Convert.ToInt32(e.Item.Tag);
            //判断当前好友的聊天窗体是否存在与集合中
            if(OpenedFrmList.dicts.ContainsKey(fromQQ))
            {
                //使窗体激活并赋予焦点
                OpenedFrmList.dicts[fromQQ].Activate();
                return;
            }
            //如果未在集合中,则打开一个新窗体
            ChatFrm cf = new ChatFrm();
            //对方昵称
            cf.NickName = e.Item.Text;
            if (e.Item.ImageIndex == 100)
            {
                //对方的头像ID
                cf.fromQQ = faceid;
                e.Item.ImageIndex = this.faceid;
            }
            else
            {
                //双击的头像
                cf.fromQQ = e.Item.ImageIndex;
            }
            //我的昵称
            cf.fromQQ = fromQQ;
            if (this.timerFlash.Enabled == true)
            {
                this.timerFlash.Stop();
            }
            //把打开的聊天窗体的QQ号保存在集合中
            OpenedFrmList.dicts.Add(fromQQ, cf);
            cf.Show();
        }
        //右键是否显这些菜单
        private void cmsMenu_Opening(object sender, CancelEventArgs e)
        {
            if (this.sideBar.SeletedItem == null)
            {
                this.Deletetsmi.Visible = false;
            }
            else
            {
                this.Deletetsmi.Visible = true;
            }

            if (this.sideBar.VisibleGroup == this.sideBar.Groups[1])
            {
                this.AddFriendstsmi.Visible = true;
            }
            else
            {
                this.AddFriendstsmi.Visible = false;
            }
        }
        //右键切换图标大小
        private void BigIcontsmi_Click(object sender, EventArgs e)
        {
            if (this.sideBar.View == SbView.LargeIcon)
            {
                this.BigIcontsmi.Text = "大图标";
                this.sideBar.View = SbView.SmallIcon;
            }
            else if (this.sideBar.View == SbView.SmallIcon)
            {
                this.BigIcontsmi.Text = "小图标";
                this.sideBar.View = SbView.LargeIcon;
            }
        }
        //右键添加好友
        private void AddFriendstsmi_Click(object sender, EventArgs e)
        {
            if(this.sideBar.SeletedItem != null)
            {
                string sql = "";
                int fromQQ = Convert.ToInt32(this.sideBar.SeletedItem.Tag);
                sql = string.Format("insert into friends values({0},{1})",LoginHelper.fromQQ,fromQQ);
                SqlCommand cmd = new SqlCommand(sql, DbHelper.conn);
                try
                {
                    DbHelper.opendb();
                    cmd.ExecuteNonQuery();
                    sql = string.Format("insert into friends values({0},{1})", fromQQ,LoginHelper.fromQQ );
                    cmd.CommandText = sql;
                    cmd.Connection = DbHelper.conn;
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
                finally
                {
                    DbHelper.closedb();
                    this.sideBar.Groups[1].Items.Remove(this.sideBar.SeletedItem);
                }
            }
        }
        //右键删除好友
        private void Deletetsmi_Click(object sender, EventArgs e)
        {
            if (this.sideBar.VisibleGroup == this.sideBar.Groups[0])
            {
                if (this.sideBar.SeletedItem != null)
                {
                    int fromQQ = Convert.ToInt32(this.sideBar.SeletedItem.Tag);
                    string sql = string.Format("delete from Friends where HostId = {0} and FriendId = {1}", LoginHelper.fromQQ, fromQQ);
                    SqlCommand cmd = new SqlCommand();
                    cmd.CommandText = sql;
                    cmd.Connection = DbHelper.conn;
                    try
                    {
                        DbHelper.opendb();
                        cmd.ExecuteNonQuery();
                        sql = string.Format("delete from Friends where HostId = {0} and FriendId = {1}", fromQQ, LoginHelper.fromQQ);
                        cmd.CommandText = sql;
                        cmd.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                    finally
                    {
                        DbHelper.closedb();
                    }
                }
            }
            else if (this.sideBar.VisibleGroup == this.sideBar.Groups[1])
            {
                this.sideBar.Groups[1].Items.Remove(this.sideBar.SeletedItem);
            }
        }
        bool flag = false;
        //如果有消那么消息按钮闪烁
        private void timerAddFriends_Tick(object sender, EventArgs e)
        {
            if(flag == true)
            {
                this.tsbNewMessage.Image = this.imageAddFriends.Images[0];
                flag = false;
            }else if(flag == false)
            {
                this.tsbNewMessage.Image = this.imageAddFriends.Images[1];
                flag = true;
            }
        }
        //点击弹出添加好友验证窗体
        private void tsbNewMessage_Click(object sender, EventArgs e)
        {
            AddFriendsFrm af = new AddFriendsFrm();
            af.Show();
            if (this.timerAddFriends.Enabled == true)
            {
                this.timerAddFriends.Enabled = false;
            }
            this.tsbNewMessage.Image = this.imageAddFriends.Images[1];
        }
        //点击sidebar里面的组播放切换组的声音
        private void sideBar_VisibleGroupChanged(SbGroupEventArgs e)
        {
            SoundPlayer player = new SoundPlayer("folder.wav");
            player.Play();
        }
        //刷新窗体
        private void tsbRefresh_Click(object sender, EventArgs e)
        {
            GetFriends();
        }
        //点击判断是否退出程序
        private void tsbExi_Click(object sender, EventArgs e)
        {
            DialogResult r = MessageBox.Show("提示信息","确认要退出么?",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
            if (r == System.Windows.Forms.DialogResult.Yes)
            {
                LoginState();
                Application.Exit();
            }
        }
        //点击头像获取个人信息
        private void picFace_Click(object sender, EventArgs e)
        {
            PersonalFrm pf = new PersonalFrm();
            pf.Show();
        }
        //点击菜单按钮链接到本地外部资源
        private void tsbTencent_Click(object sender, EventArgs e)
        {
            Help.ShowHelp(this, "D:\\Program Files\\Tencent\\QQLive\\QQLive.exe");
        }
        //单击头像弹出个人资料
        private void picFace_DoubleClick(object sender, EventArgs e)
        {
            PersonalFrm pf = new PersonalFrm();
            pf.Show();
        }
        //登录的状态
        public void LoginState()
        {
            string sql = string.Format("update users set LoginState=0 where id={0}", LoginHelper.fromQQ);
            SqlCommand cmd = new SqlCommand(sql, DbHelper.conn);
            try
            {
                DbHelper.opendb();
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                DbHelper.closedb();
            }
        }
        //退出应用程序
        private void MainFrm_FormClosing(object sender, FormClosingEventArgs e)
        {
            Application.Exit();
        }
        //跳转到设置密保的窗体
        private void MiBaotsmt_Click(object sender, EventArgs e)
        {
            MiBaoFrm mbf = new MiBaoFrm();
            mbf.ShowDialog();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值