毕业论文--基于vc的局域网聊天室设计与实现内容摘要:

indow SW_HIDE。 SetDlgItemText IDC_EDIT3,亡羊哺狼。 SetDlgItemText IDC_EDIT4,1025。 CBitmap bitmap。 IDB_BITMAP1。 0,SS_BITMAP。 HBITMAP。 return TRUE。 // return TRUE unless you set the focus to a control 代码中又涉及到了虚函数多态性,实现了动态联编。 先定义了个 CWnd 的指针。 CWnd 封装了函数 GetDlgItem ,这样对于其派生的比如编辑框类,静态文本类,按钮类等都继承了此函数。 这样只需 在最前面定义一个 CWnd 的指针就可以动态的获取相应消息。 这些代码首先对窗口进行了一些文本设置和某些窗口的隐藏。 还设置了服务器的昵称为 亡羊哺狼 void CTcpseverDlg::Onsend CString str,history。 GetDlgItemText IDC_EDIT1,history。 GetDlgItemText IDC_EDIT2,str。 str severname+:+str。 int len。 for int i 1。 i csnum。 i++ if csrev[i] if sended csrev[i].Send str,len SetDlgItemText IDC_EDIT2,。 SetDlgItemText IDC_EDIT1,history+\r\n+str。 CEdit *ce CEdit* GetDlgItem IDC_EDIT1。 ce LineScroll ce GetLineCount 1。 这是点击控件“发送”的消息响应函数。 函数先把以前聊天区的内容存储下来,再把其要发送的内和以前的内容都打印到屏幕上。 做完这些工作向各个登入用户发送信息。 图 8 用户登入后聊天图 void CTcpseverDlg::Onlisten CString ipstr,portstr。 int port。 GetDlgItemText IDC_EDIT3,ipstr。 severname ipstr。 GetDlgItemText IDC_EDIT4,portstr。 port atoi portstr。 if port 1024amp。 amp。 port 65536 SetDlgItemText IDC_listen,正在监听„„。 if port。 this,csnum。 CWnd *cw GetDlgItem IDC_EDIT3。 cw EnableWindow false。 cw GetDlgItem IDC_EDIT4。 cw EnableWindow false。 cw GetDlgItem IDC_listen。 cw EnableWindow false。 cw GetDlgItem IDC_EDIT1。 cw SetWindowText 本服务器名称为 : +severname+\r\n 正在后台等待用户连接 ,监听端口 :+portstr+„„。 else MessageBox 绑定监听端口失败 ,请确认该端口没有被其它程序占用。 CString strServ,strPort。 CWnd* wnd。 wnd GetDlgItem IDC_EDIT3。 wnd GetWindowText strServ。 wnd GetDlgItem IDC_EDIT4。 wnd GetWindowText strPort。 wnd GetDlgItem IDC_SERVINFORM。 wnd SetWindowText \n**************** 服务器名称:\n+strServ+\n\n 端口号 : +strPort+\n\n 协议类型: TCP\n 传输控制协议\n****************。 else MessageBox 端口输入有误 ,请重新输入。 前面一部分代码捕捉了端口号,但是端口号是以字符串的形式处理的,而不是数字。 函数 TrimLeft 和 TrimRight 分别意为裁掉该端口字符串的左边空格和右 边空格。 这样防止了用户某些习惯性输入错误。 当正确输入端口号后,创建了一个监听套接字并对端口进行监听。 然后通过 EnableWindow 把某些窗体设置为不可点击。 最后再把信息反馈到屏幕上打印出来。 右边有个图片设置,可以点击图片更改到下一幅。 再下面就是服务器信息。 打印出了服务器的监听端口号,昵称等等,这些由程序动态获取。 最后是个公告信息,可以直接点击进行编辑。 贴出部分实现代码: void CTcpseverDlg::OnPic static int index。 index++。 index index%5。 CBitmap bitmap。 int bit[5] IDB_BITMAP1,IDB_BITMAP2,IDB_BITMAP3,IDB_BITMAP4,IDB_BITMAP5。 bit[index]。 0,SS_BITMAP。 HBITMAP。 这是点击改变图片的代码,在 VC 中, ID 号其实就是一些整数的标记,把 ID存 入一个整型数组中,实现没点击图片一次自动更换 ID。 这样可以实现动态改变图片。 void CTcpseverDlg::OnMarkst CWnd* wnd。 CString str。 wnd GetDlgItem IDC_MARKST。 wnd GetWindowText str。 wnd ShowWindow SW_HIDE。 wnd GetDlgItem IDC_MARK。 wnd ShowWindow SW_SHOW。 wnd SetWindowText str。 这是公布框的设计,其实在同一区域中摆放了两个控件,一个静态文本,一个编辑框。 在设计的过程中对话框的初始化函数中对两个控件做了设置。 将静态文本显示,编编辑框隐藏,并且设置静态文本中的内容和编辑框一样。 这样当启动服务端后显示出来的就是静态文本了,这样比较美观。 上面函数意思为当点击静态文本时,先获取文本中的内容,然后将其隐藏。 再将编辑框显示出来,设置编辑框中的内容为开始获取的静态文本中内容。 这样就可以和设置心情一样的设置文本内容了。 这样实现起来比较简单,方便,无需弹出一个对话框设置。 设置好文本后,点击编辑框以外的任何地方,都可以把内容做更新。 然后隐藏编辑框,显示静态文本。 这样就要建立一个系统响应函数,对 MouseClick 消息做一个捕获。 代码见下: void CTcpseverDlg::OnLButtonDown UINT nFlags, CPoint point CWnd* wnd。 CString str。 wnd GetDlgItem IDC_MARK。 wnd GetWindowText str。 wnd ShowWindow SW_HIDE。 wnd GetDlgItem IDC_MARKST。 wnd ShowWindow SW_SHOW。 wnd SetWindowText str。 CDialog::OnLButtonDown nFlags, point。 该函数当点击对话框时会被系统自动调用,函数将编辑框中上的内容设置到了静态文本中,然后显示静态文本,隐藏了编辑框。 有一个问题就是在初始化函数中为什么要将静态文本的内容复制到编辑框中呢。 这个必须要复制的,不然在启动程序后任何时候点击对话框都会将静态文本内容置空。 这个可以去 理解一下。 下图显示了点击公告栏和图片后的情况: 图 9 修改资料效果图 在服务器中有个” ”收缩符号,当点击它以及它所在位置的垂直方向时可以把右边区域收缩起来。 这样可以去掉不是很关心的内容。 当点击后,侧边栏又显示出” ”符号。 再次点击又会还原出来。 图 10 精简视图 void CTcpseverDlg::OnShow // TODO: Add your control notification handler code here CString str。 static CRect rectLarge。 static CRect rectSmall。 CRect rectSeparate。 if GetWindowRect amp。 rectLarge。 GetDlgItem IDC_SEPARATE GetWindowRect amp。 rectSeparate。 if GetDlgItemText IDC_SHOW,str ,str \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n str \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n。 SetDlgItemText IDC_SHOW,str。 SetWindowPos NULL,0,0, , ,SWP_NOMOVE|SWP_NOZORDER。 else str \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n。 SetDlgItemText IDC_SHOW,str。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。