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

📄 mainform.cs

📁 语音视频功能 里面实现了基本的QQ与语音对话
💻 CS
📖 第 1 页 / 共 3 页
字号:
			lvf.BackGroundImage.Image=skf.GetImage("/gowk_skin/images/list/head");
			lvf.GScrollBar.IncreaseArrowImage.ActiveImage=skf.GetImage("/gowk_skin/images/scrollbar/scrollbar_downarrowa");
			lvf.GScrollBar.IncreaseArrowImage.PressedImage=skf.GetImage("/gowk_skin/images/scrollbar/scrollbar_downarrowp");
			lvf.GScrollBar.IncreaseArrowImage.NormalImage=skf.GetImage("/gowk_skin/images/scrollbar/scrollbar_downarrow");

			lvf.GScrollBar.DecreaseArrowImage.ActiveImage=skf.GetImage("/gowk_skin/images/scrollbar/scrollbar_uparrowa");
			lvf.GScrollBar.DecreaseArrowImage.PressedImage=skf.GetImage("/gowk_skin/images/scrollbar/scrollbar_uparrowp");
			lvf.GScrollBar.DecreaseArrowImage.NormalImage=skf.GetImage("/gowk_skin/images/scrollbar/scrollbar_uparrow");

			lvf.GScrollBar.ThumbImage.ActiveImage=skf.GetImage("/gowk_skin/images/scrollbar/scrollbar_thumba");
			lvf.GScrollBar.ThumbImage.PressedImage=skf.GetImage("/gowk_skin/images/scrollbar/scrollbar_thumbp");
			lvf.GScrollBar.ThumbImage.NormalImage=skf.GetImage("/gowk_skin/images/scrollbar/scrollbar_thumb");
			lvf.View=View.SmallIcon;

			//	lvf.GImage.Image=gowk.common.SkinConfig.Instance.GetImage("/gowk_skin/images/list/head");
			this.gListView1.Items.Add(lvf);
			/*		}
					if(lvf.View!=View.SmallIcon)lvf.View=View.SmallIcon;*/

			return lvf;
		}
		public void GetRoster()
		{
			rm.GetRoster();
		}
		private void rm_GetRosterResult(JabberEventArgs e)
		{
			if(e.ReplyPacket==null)
			{
				if(this.jc.State==gowk.core.State.Logined)
				{
					this.GetRoster();
				}
					return;
			}//time out	
			IQ iq=e.ReplyPacket as IQ;
			if(iq==null)
			{
				System.Diagnostics.Trace.WriteLine("er");
			}
			if(iq.Type==PacketType.error){return;}//error handing
			if(iq.Type!=PacketType.result)return;
			if(iq.Query==null)return;
			
			this.niah.StopAnimate();
			RosterQuery rq=(RosterQuery)iq.Query;
			this.AddItems2List(rq.Items);
			GListViewItem itm=this.gListView1.Items[0];
			itm.Items[0].View=View.SmallIcon;

			////////////////////
			this.ClearLoginUI();
			////////////////////
		}
		private void AddItems2List(Item[] items)
		{
			this.gListView1.Items.Clear();
			GListViewItem lvfJabber=this.CreateFolder("Jabber");
			GListViewItem gp_friend=new GListViewItem();
			gp_friend.Text="我的好友";
			gp_friend.GImage.Image=skf.GetImage("/gowk_skin/images/list/dropdown");
			lvfJabber.Items.Add(gp_friend);
			GListViewItem gp_pending=new GListViewItem();
			gp_pending.Text="等待添加";
			gp_pending.GImage.Image=skf.GetImage("/gowk_skin/images/list/dropdown");
			lvfJabber.Items.Add(gp_pending);

			Image tempface=this.skf.GetImage("/gowk_skin/images/face/tempface");

			GListViewItem lvfMsn=this.CreateFolder("MSN");

			if(items==null)return;
			///////////////////////////////
			this.gListView1.BeginUpdate();
			////////////////////////////////
			
			foreach(Item itm in items)
			{ 
				GListViewItem group;
				if(itm.Ask!=null)
				{
					group=gp_pending;
				}
				else if(itm.Group==null || itm.Group.Trim()==String.Empty || itm.Group.Trim()==gp_friend.Text)
				{
					group=gp_friend;
				}
				else
				{
					group=this.GetORAddGListViewItem(lvfJabber,itm.Group);
				}
				GListViewItem item=new GListViewItem();
				item.Tag=itm;
				item.Text=itm.Name;
				item.GImage.Image=tempface;
				group.Items.Add(item);
			}	
			this.SortListView();
			this.gListView1.EndUpdate();
		}
		private void rm_RosterReceived(JabberEventArgs e)
		{

			IQ iq=(IQ)e.Packet;
			if(iq.Query==null)return;
			if(iq.Type==PacketType.error)
			{
				//error handing
				return;
			}
			if(iq.Type!=PacketType.set)return;
			if(iq.Query==null)return;
			RosterQuery rq=(RosterQuery)iq.Query;
			if(rq.Items==null)return;

			this.gListView1.BeginUpdate();
			
			GListViewItem lvfJabber=this.gListView1.Items["Jabber"];
			GListViewItem gp_friend=lvfJabber.Items["我的好友"];
			GListViewItem gp_pending=lvfJabber.Items["等待添加"];

			Image tempface=this.skf.GetImage("/gowk_skin/images/face/tempface");

			GListViewItem lvfMsn=this.gListView1.Items["MSN"];

			foreach(Item itm in rq.Items)
			{ 
				GListViewItem group;
				if(itm.Ask!=null)
				{
					group=gp_pending;
				}
				else if(itm.Group==null || itm.Group.Trim()==String.Empty || itm.Group.Trim()==gp_friend.Text)
				{
					group=gp_friend;
				}
				else
				{
					group=this.GetORAddGListViewItem(lvfJabber,itm.Group);
				}
				GListViewItem item=this.GetORAddGListViewItem(group,itm.Name);
				item.Tag=itm;
				item.Text=itm.Name;
				item.GImage.Image=tempface;
			}	
			this.SortListView();
			this.gListView1.EndUpdate();
		}
		#endregion

		#region login
		bool autoLog=false;
		private void RequireUILogin()
		{
			// 
			// loginPanel1
			// 
			if(this.loginPanel1!=null)
			{
				this.loginPanel1.ShowLogin();
				return;
			}
			this.loginPanel1 = new gowk.forms.LoginPanel();
			this.loginPanel1.SuspendLayout();
			//		this.loginPanel1.Anchor = AnchorStyles.Left| AnchorStyles.Right|AnchorStyles.Top|AnchorStyles.Bottom;
			//		this.loginPanel1.Width=this.Width-15;
			//		this.loginPanel1.Location=new Point(5,50);
			//		this.loginPanel1.Height=this.Height-100;
			this.loginPanel1.Location = new System.Drawing.Point(10,62);
			this.loginPanel1.OK+=new EventHandler(loginPanel1_OK);
			this.loginPanel1.CancelLogin+=new EventHandler(loginPanel1_CancelLogin);
			this.loginPanel1.BackColor=Color.Transparent;
			this.loginPanel1.Dock=DockStyle.Fill;
			//	this.loginPanel1.GBorderStyle=GBorderStyle.DashDotDot;
			this.Controls.Add(this.loginPanel1);
			this.Controls.SetChildIndex(this.loginPanel1,this.Controls.Count-1);
			this.loginPanel1.ResumeLayout();
		}
		private void loginPanel1_OK(object sender, EventArgs e)
		{
			this.autoLog=true;
			this.loginPanel1.ShowProgress();
			this.Login(this.loginPanel1.User,this.loginPanel1.Pass);
		}
		private void ClearLoginUI()
		{
			if(this.Controls.Contains(this.loginPanel1))
			{
				Controls.Remove(this.loginPanel1);
				this.loginPanel1.Dispose();
				this.loginPanel1=null;
			}
		}
		private void am_LoginResult(JabberEventArgs e)
		{
			if(this.jc.State==gowk.core.State.Logined)
			{
				if(this.gTabControl1==null || !this.Controls.Contains(this.gTabControl1))this.LoadTab();
				this.GetRoster();
				//	this.ClearLoginUI();
			}
			else if(e.ReplyPacket==null)
			{
				this.Notify(null,"登陆超时");
				if(this.autoLog)
					this.Login();//try once more
			}
			else if(e.ReplyPacket.Type==PacketType.error)
			{
			//	this.Notify(null,"登陆错误!");
				MessageBox.Show("错误,请确认你的用户名和密码正确,\n或你已经在别的地方登陆了");
				
				loginPanel1_CancelLogin(null,null);
			}
			else 
			{
			}
		}

		public void Login(string uid,string pwd)
		{
			jc.Jid=new Jid(uid.Trim());
			jc.Jid.Resouce="gowk";
			jc.Password=pwd.Trim();
			jc.Control=this;
			
	

			this.Login();
		}
		public void Login()
		{
		/*	以下设置代理服务器,
		  jc.Proxy=new gowk.net.Proxy();
			jc.Proxy.Port=555;
			jc.Proxy.Host="192.168.0.1";*/
			this.GoOnline();
		}
		public void GoOnline()
		{
			Image img=this.skf.GetImage("/gowk_skin/images/status/status1");
			if(img!=null)this.niah.Animate(img);
			System.Threading.ThreadPool.QueueUserWorkItem(new WaitCallback(this.GoOnlineInternal));
		}
		public void Notify(Image img,string txt)
		{
			//System.Diagnostics.Trace.WriteLine(txt);
				System.Windows.Forms.MessageBox.Show(txt);
		}
		private void GoOnlineInternal(object o)
		{
			//		if(this.jc.Socket!=null)
			//		{
			//			this.jc.Disconnect();
			//		}
			//	if(this.jc.State!=gowk.core.State.Disconnected)
			//	{
			//		this.jc.Disconnect();
			//	}
			try
			{
				this.jc.Connect();
			}
			catch(gowk.net.Sockets.ProxyException pe)
			{
				this.Notify(null,pe.Message);
				return;
			}
			catch(System.Net.Sockets.SocketException se)
			{
				this.Notify(null,se.Message);
				return;
			}
			if(this.jc.State!=gowk.core.State.Logining)return;
			/*	gowk.core.packets.IQ iq=new IQ();
				iq.ID=gowk.core.IDGenerator.NewID;
				gowk.core.packets.querys.AuthQuery aq=new gowk.core.packets.querys.AuthQuery();
				aq.Username="gowhcy";
				iq.Type=gowk.core.packets.PacketType.get;
				iq.Query=aq;
				this.am.Send(iq);*/
			
			//	System.Diagnostics.Debug.Assert(this.jc.State==gowk.core.State.Logining);
			am.Login();
		}
		public void Logout()
		{
			this.autoLog=false;
			this.niah.StopAnimate();
			//if(this.jc!=null && this.jc.State!=gowk.core.State.Disconnected)
			//	this.jc.Disconnect();
			if(this.jc.Socket!=null && this.jc.Socket.Connected)this.jc.Disconnect();
		}
		#endregion
		private void notifyIcon1_MouseUp(object sender, MouseEventArgs e)
		{
			this.Activate();
			if(e.Button==MouseButtons.Right)
			{
				this.gContextMenu1.Show(this,this.PointToClient(Control.MousePosition));
			}
			else
			{
				if(this.jc.State==gowk.core.State.Logined)
				this._contextmenu_present.Show(this,this.PointToClient(Control.MousePosition));
			}
		}


		private void gButton4_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			this.gContextMenu1.Show((Control)sender,new Point(e.X,e.Y));
		}

		private void jc_StateChange(object sender, EventArgs e)
		{
			switch(jc.State)
			{
				case gowk.core.State.Disconnected:
					if(this.autoLog)this.Login();
					break;
				case gowk.core.State.Logined:
					this.pm.Presence(null,0);
					break;
				case gowk.core.State.Logining:
					break;
				case gowk.core.State.StartStream:
					break;
			}
		}

		private void SortListView()
		{
			this.gListView1.BeginUpdate();
			UserSorter us=new UserSorter(this.pm);
			foreach(GListViewItem f in this.gListView1.Items)
			{
				foreach(GListViewItem g in f.Items)
				{
					g.Items.Sort(us);
				}
			}
			this.gListView1.EndUpdate();
		}
		private void pm_StatusChanaged(JabberEventArgs e)
		{
			this.SortListView();
			this.gListView1.Invalidate();
		}

		private void pm_Subcribe(JabberEventArgs e)
		{
			PresenceForm pf=new PresenceForm(this.jc,(Presence)e.Packet);
			pf.Show();
		}

		private void pm_Subscribed(JabberEventArgs e)
		{
		}

		private void gButton4_Click(object sender, System.EventArgs e)
		{
		
		}

		private void vm_vCardReceived(JabberEventArgs e)
		{
			////////////////////////
			/// to do update the list
			////////////////////////
		}

		private void notifyIcon1_DoubleClick(object sender, System.EventArgs e)
		{
			this.WindowState=FormWindowState.Normal;
			this.Visible=true;
			this.Activate();
		}

		private void gButton5_Click(object sender, System.EventArgs e)
		{
			if(this.jc.State==gowk.core.State.Logined)
				this._contextmenu_present.Show(this,this.PointToClient(Control.MousePosition));
		}
	
		private class UserSorter:System.Collections.IComparer
		{
			private PresenceManager pm=null;
			public UserSorter(gowk.core.managers.PresenceManager pm)
			{
				this.pm=pm;
			}
			#region IComparer 成员

			public int Compare(object x, object y)
			{
				try
				{
					GListViewItem ix=(GListViewItem)x;
					Item itmx=ix.Tag as Item;
					GListViewItem iy=(GListViewItem)y;
					Item itmy=iy.Tag as Item;
					bool xo=this.pm.OnlineUsers.Contains(itmx.Jid);
					bool yo=this.pm.OnlineUsers.Contains(itmy.Jid);
					if(xo==yo)
					{
						return System.String.Compare(itmx.Name,itmy.Name);
					}
					else if(xo)
						return -1;
					else
						return 1;
				}
				catch(System.Exception ex)
				{
					gowk.utility.Diagnostics.Debug.Write(ex);
				}
				return 0;
			}

			#endregion
		}

		private void gTabControl1_SelectedIndexChanged(object sender, EventArgs e)
		{
			if(this.gTabControl1.SelectedIndex>0)
			{
				GTabPage gp=this.gTabControl1.GTabPages[this.gTabControl1.SelectedIndex];
				if(gp.Controls.Count==0)
				{
					 AxSHDocVw.AxWebBrowser aw=new AxSHDocVw.AxWebBrowser();
					gp.Controls.Add(aw);
					aw.Dock=DockStyle.Fill;
					object flag=null,name=null,head=null,data=null;
					object url=System.IO.Path.Combine(System.Environment.CurrentDirectory,"start.htm");
					aw.Navigate2(ref url,ref flag,ref name,ref data,ref head);
				}
			}
		}

		private void loginPanel1_CancelLogin(object sender, EventArgs e)
		{
			this.Logout();
			this.UnloadTab();
			this.RequireUILogin();
		}
	}
}

⌨️ 快捷键说明

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