| 发表于:2007-09-06 00:28:552楼 得分:0 |
/// <summary> /// 发送消息,将接受方用户名和消息正文分开发送,便于服务器端处理 /// </summary> /// <param name= "sender "> </param> /// <param name= "e "> </param> private void send_btn_click(object sender, eventargs e) { string localtxt = null; string sendtxt = null; string msg = msg_tb.text.trim(); if (msg == string.empty) { messagebox.show( "不能发送空消息 ", "提示 ", messageboxbuttons.ok, messageboxicon.information); return; } //如果是聊天室模式则向服务器发送广播请求 if (broadcast_rb.checked) { localtxt = string.format( "[广播]您在 {0} 对所有人说:\r\n{1}\r\n\r\n ", datetime.now, msg); sendtxt = string.format( "[广播]{0} 在 {1} 对所有人说:\r\n{2}\r\n\r\n ", _username, datetime.now, msg); //发送广播请求 _nws.write(new byte[] { 0, 5 }, 0, 2); } else { string _receiver = online_cb.text; if (_receiver == string.empty) { messagebox.show( "请选择一个接收者!\n如果没有接受者可选,表明当前只有您一个人在线\t ", "发送消息 ", messageboxbuttons.ok, messageboxicon.information); return; } localtxt = string.format( "[私聊]您在 {0} 对 {1} 说:\r\n{2}\r\n\r\n ", datetime.now, _receiver, msg); sendtxt = string.format( "[私聊]{0} 在 {1} 对您说:\r\n{2}\r\n\r\n ", _username, datetime.now, msg); //发送接受者用户名 _nws.write(encoding.unicode.getbytes(_receiver), 0, encoding.unicode.getbytes(_receiver).length); } _nws.write(encoding.unicode.getbytes(sendtxt), 0, encoding.unicode.getbytes(sendtxt).length); chatrcd_rtb.appendtext(localtxt); msg_tb.clear(); } /// <summary> /// 有新消息来时闪烁任务栏并且保持聊天记录内容滚动到最底端,qq就是这么玩滴~ /// </summary> /// <param name= "sender "> </param> /// <param name= "e "> </param> [dllimport( "user32.dll ")] public static extern bool flashwindow(intptr hwnd, bool binvert); private void chatrcd_rtb_textchanged(object sender, eventargs e) { chatrcd_rtb.scrolltocaret(); if (this.windowstate == formwindowstate.minimized) { flashwindow(this.handle, true); } } /// <summary> /// 当窗口恢复后取消任务栏的闪烁效果 /// 当窗口最小化时判断是否要隐藏到系统托盘 /// </summary> /// <param name= "sender "> </param> /// <param name= "e "> </param> private void chat_frm_sizechanged(object sender, eventargs e) { switch (this.windowstate) { case formwindowstate.normal: flashwindow(this.handle, false); break; case formwindowstate.minimized: if (_hideflag) { notifyicon1.visible = true; this.visible = false; } break; default: break; } } /// <summary> /// 在线列表下拉框显示之前向服务器发送请求在线列表的命令 /// </summary> /// <param name= "sender "> </param> /// <param name= "e "> </param> private void online_cb_dropdown(object sender, eventargs e) { _nws.write(new byte[] { 0, 2 }, 0, 2); } /// <summary> /// 聊天模式改变 /// </summary> /// <param name= "sender "> </param> /// <param name= "e "> </param> private void broadcast_rb_checkedchanged(object sender, eventargs e) { if (private_rb.checked) { online_cb.enabled = true; } else { online_cb.enabled = false; } } /// <summary> /// 设置最小化到系统托盘的标记值 /// </summary> /// <param name= "sender "> </param> /// <param name= "e "> </param> private void hide_cb_checkedchanged(object sender, eventargs e) { _hideflag = hide_cb.checked; } | | |
|