VC专业项目设计_第1页
VC专业项目设计_第2页
VC专业项目设计_第3页
VC专业项目设计_第4页
VC专业项目设计_第5页
免费预览已结束,剩余24页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机软件技术专业VC+专业项目设计课程实习设计名称:VC+专业项目设计课程实习 班 级:软件09-2 姓 名:梁小倩 学 号:13 设计时间:2011年6月13日-7月1日 指导教师:李昌领 一、课程实习准备工作1、熟悉课程设计任务,明确设计内容。根据设计任务书给出的课题要求,理清思路,明确设计内容。2、根据课程设计内容,查找有关编程资料。3、根据设计内容的编程特点,准备实验环境和开发工具、文档书写工具。二、课程实习的任务综合利用VC+有关Windows编程的知识与技术实现对3D虚拟场景的建模、导入、显示与漫游。深入socket通信编程,完成基本的文本、图像信息的传输,模拟基本QQ会话功能。

2、初步掌握利用VC+进行较大规模、功能比较复杂的任务的设计方法与技巧。三、课程实习的目的本设计是软件技术专业的一门重要的综合实践课,在经过一系列程序设计基础练习后,综合运用所学知识进行更为高级的专业项目的程序开发。此时VC+不是作为一个学习对象而是作为一个工具进行创造性的程序设计工作。主要的专业领域有:数据库信息管理(ADO.net + 数据库)、3D图形应用编程(OpenGL + DirectX)、图像应用编程、通信应用编程(TCP/IP + Socket)、系统应用编程(系统工具的模拟,如:各类下载工具、聊天程序、系统管理软件等)、后台Web编程(可选)。四、课程实习的题目课题一、三维环境的

3、简单漫游程序设计。具体的三维环境可以分为两类(任选一类):室外景物(风景、建筑、艺术等)、室内景物(家居、工作场景、实验室、复杂工具内部)。课题二、基于SOCKET的通讯程序设计(主要模仿QQ的功能)。五、课程实习的过程和内容课题一:三维环境的漫游程序设计1、目标在OpenGL的基础上,分别以飞行模式和驾驶模式漫游室外场景或室内场景。2、功能1)程序应支持两种模式,一是飞翔模式,二是驾驶模式。2)飞翔模式中应支持的功能有:(1)前后飞行。沿Z轴正方向、反方向运动;(2)左右飞行。沿X轴正方向、反方向运动;(3)上下飞行。沿Y轴正方向、反方向运动;(4)场景旋转。分别沿X、Y、Z坐标轴旋转;3)

4、驾驶模式中应支持的功能有:(1)显示即时运动信息;(2)自动行走;(3)自动行走过程中,手动左右转弯;3、基本思路主要思路如下:(1)小组讨论,建立什么样的场景,发挥想象力、创造力,创意出虚拟场景方案;(2)针对上述虚拟场景方案,建模人员实施建模;(3)将所建模型导出为3DS文件;(4)利用相关软件察看文件内容,熟悉场景中的对象名称等内容;(5)导入3DS文件内容,在项目中显示其中的虚拟场景;(6)实现对场景的漫游。4、场景建模场景建模的平台主要有两种:一种是3DS MAX,用于景物的实体建模;一种是Photoshop,主要用来设计景物中的纹理贴图,达到真实性的效果。5、导出模型主要利用3DS

5、 MAX的导出功能,把所建模型输出为3DS文件。6、建立编程项目环境(1)建立一个单文档视项目,定好存放位置;(2)定制支持OpenGL环境的资源;7、利用第三方软件观察3DS文件中的模型主要是利用Right Hemisphere公司生产的Deep Exploration软件来观察上面导出的3DS模型。8、操作3DS模型在项目中导入3DS文件环境的搭建、从3DS文件中加载模型、显示模型、模型驱动的方法见实验示例。9、步骤1.>新建一个项目,名称为ThreeD。2.>在stdafx.h中添加一下代码:#include "stdafx.h"#include &quo

6、t;xxxxiang.h"#include "xxxxiangDoc.h"#include "xxxxiangView.h"/#include "math.h"#include "3dobject.h"#ifdef _DEBUG#define new DEBUG_NEW#endifdouble pi = 3.1415926535;GLfloat light_pos = 120.0f, 100.0f, 300.0f, 0.0f ; /*光源位置*/C3DObject obj;float zz =0;floa

7、t xx =0;float yy =0;float nAngleY=0;/ 沿Y轴旋转的角度float nAngleX=0;/ 沿X轴旋转的角度float nAngleZ=0;/ 沿Z轴旋转的角度float zstep=1.0;/ 前后移动时步距float fov=60;/ 视线张角AABB_BOX bb;/ 物体的包围盒double step =0.1;/ 前后移动时步距(驾驶模式)double total_distance=0;/ CxxxxiangViewIMPLEMENT_DYNCREATE(CxxxxiangView, CView)BEGIN_MESSAGE_MAP(Cxxxxian

8、gView, CView)/ 标准打印命令ON_COMMAND(ID_, &CView:On)ON_COMMAND(ID_, &CView:On)ON_COMMAND(ID_, &CView:On)ON_WM_CREATE()ON_WM_DESTROY()ON_WM_SIZE()ON_WM_KEYDOWN()ON_WM_TIMER()END_MESSAGE_MAP()/ CxxxxiangView 构造/析构CxxxxiangView:CxxxxiangView()/ TODO: 在此处添加构造代码m_viewmode=1;/ =0:飞翔模式;=1:驾驶模式car_ro

9、tation=-90;/ 与X轴夹角distance = 10;/ 视线的长度eye.x=7.0;eye.y= 1;eye.z=-32;center.x= eye.x + distance*cos(pi *car_rotation/180);center.y=eye.y;/视线水平,故Y坐标不变;center.z= eye.z +distance*sin(pi *car_rotation/180);CxxxxiangView:CxxxxiangView()BOOL CxxxxiangView:PreCreateWindow(CREATESTRUCT& cs)cs.style |=WS_

10、CLIPCHILDREN | WS_CLIPSIBLINGS;/ 置窗口类的风格为:背景色为黑色,其它略cs.lpszClass = AfxRegisterWndClass( CS_HREDRAW | CS_VREDRAW,NULL/*LoadCursor(AfxGetInstanceHandle(),IDC_ARROW)*/,(HBRUSH)GetStockObject(BLACK_BRUSH);return CView:PreCreateWindow(cs);/ CxxxxiangView 绘制void CxxxxiangView:OnDraw(CDC* /*pDC*/)Cxxxxiang

11、Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;RenderScene();/ CxxxxiangView 打印BOOL CxxxxiangView:OnPreparePrinting(CPrintInfo* pInfo)/ 默认准备return DoPreparePrinting(pInfo);void CxxxxiangView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: 添加额外的打印前进行的初始化过程void CxxxxiangView

12、:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: 添加打印后进行的清除过程/ CxxxxiangView 诊断#ifdef _DEBUGvoid CxxxxiangView:AssertValid() constCView:AssertValid();void CxxxxiangView:Dump(CDumpContext& dc) constCView:Dump(dc);CxxxxiangDoc* CxxxxiangView:GetDocument() const / 非调试版本是内联的ASSERT(m_pDocum

13、ent->IsKindOf(RUNTIME_CLASS(CxxxxiangDoc);return (CxxxxiangDoc*)m_pDocument;#endif /_DEBUG/ CxxxxiangView 消息处理程序int CxxxxiangView:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CView:OnCreate(lpCreateStruct) = -1)return -1;/ ()创建设备上下文对象m_pDC = new CClientDC(this);/ ()填充OpenGL点格式变量int pixelformat;PIXE

14、LFORMATDESCRIPTOR pfd = sizeof(PIXELFORMATDESCRIPTOR), / pfd结构的大小 1, / 版本号 PFD_DRAW_TO_WINDOW | / 支持在窗口中绘图 PFD_SUPPORT_OPENGL | / 支持OpenGL PFD_DOUBLEBUFFER, / 双缓存模式 PFD_TYPE_RGBA, / RGBA 颜色模式 24, / 24 位颜色深度 0, 0, 0, 0, 0, 0, / 忽略颜色位 0, / 没有非透明度缓存 0, / 忽略移位位 0, / 无累加缓存 0, 0, 0, 0, / 忽略累加位 32, / 32 位深

15、度缓存 0, / 无模板缓存 0, / 无辅助缓存 PFD_MAIN_PLANE, / 主层 0, / 保留 0, 0, 0 / 忽略层,可见性和损毁掩模; / ()匹配像素格式if ( (pixelformat = ChoosePixelFormat(m_pDC->GetSafeHdc(), &pfd) = 0 )MessageBox("匹配像不比不成功!");return FALSE;/()设置像素格式if (SetPixelFormat(m_pDC->GetSafeHdc(), pixelformat, &pfd) = FALSE)Mess

16、ageBox("设置像素格式不成功!");return FALSE;/()如果是颜色索引模式,还要设置调色板if(pfd.dwFlags & PFD_NEED_PALETTE)SetLogicalPalette(); /设置逻辑调色板/ ()生成OpenGL渲染描述表m_hRC = :wglCreateContext(m_pDC->GetSafeHdc();/ ()把“OpenGL渲染描述表”关联到“当前的设备上下文对象”BOOL b=wglMakeCurrent(m_pDC->GetSafeHdc(), m_hRC);/ 装入模型/*obj.Load3

17、DObjects("Scenes底盘.3DS");*/ 装入模型/*obj.Load3DObjects("Scenes破碎锤-锤头.3DS");*/ 装入模型obj.Load3DObjects("Scenes主场景.3DS");obj.GetModelBoundingbox(bb);/ 自动放到场景一定距离处,方便能看到整个模型float l = (bb.xmax - bb.xmin)/2;float n = l / tan(fov * 3.1415926 / (2 * 180 );/ 根据模型的长度计算物体应离开视点的位置zz=-(

18、n+(bb.zmax - bb.zmin) /2+0.1);/ 根据模型大小确定前后移动的距离if (bb.xmax - bb.xmin)<=10)zstep=0.02;else if (bb.xmax - bb.xmin)<=100)zstep=0.1;else if (bb.xmax - bb.xmin)<=1000)zstep=1.0;else zstep=10;/ 仅用于说课zstep=0.1;zz =-48;yy =28;nAngleY=-156;/ 仅用于说课 GLfloat ambient = 0.5, 0.2, 0.2, 1.0 ; GLfloat specu

19、lar = 1.0, 1.0, 1.0, 1.0 ; GLfloat diffuse = 0.5, 0.5, 0.5, 1.0 ; GLfloat light_position = 1.0, 1.0, 1.0, 0.0 ; GLfloat mat_specular = 1.0, 1.0, 1.0, 1.0 ; GLfloat mat_shininess = 128.0 ; glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); glLightf

20、v(GL_LIGHT1, GL_POSITION, light_position); glLightfv (GL_LIGHT1, GL_AMBIENT, ambient); glLightfv (GL_LIGHT1, GL_SPECULAR, specular); glLightfv (GL_LIGHT1, GL_DIFFUSE, diffuse); glEnable(GL_LIGHTING); glEnable(GL_LIGHT1); glDepthFunc(GL_LEQUAL); glEnable(GL_DEPTH_TEST);glEnable(GL_AUTO_NORMAL); glEna

21、ble(GL_NORMALIZE); / 启动面剔除功能glEnable(GL_CULL_FACE); / 不渲染一些面的功能启动glFrontFace(GL_CCW);/ 指定正面的方向glCullFace(GL_BACK); / 不渲染背面/ 启动混合glEnable (GL_BLEND);glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);glEnable(GL_TEXTURE_2D);return 0;void CxxxxiangView:OnDestroy()CView:OnDestroy();/ TODO: 在此处添加消息处理程序代

22、码void CxxxxiangView:SetLogicalPalette(void) struct WORD Version; WORD NumberOfEntries; PALETTEENTRY aEntries256; logicalPalette = 0x300, 256 ;BYTE reds = 0, 36, 72, 109, 145, 182, 218, 255;BYTE greens = 0, 36, 72, 109, 145, 182, 218, 255;BYTE blues = 0, 85, 170, 255; for (int colorNum=0; colorNum<

23、;256; +colorNum) logicalPalette.aEntriescolorNum.peRed = redscolorNum & 0x07; logicalPalette.aEntriescolorNum.peGreen = greens(colorNum >> 0x03) & 0x07; logicalPalette.aEntriescolorNum.peBlue = blues(colorNum >> 0x06) & 0x03; logicalPalette.aEntriescolorNum.peFlags = 0; m_hPa

24、lette = CreatePalette (LOGPALETTE*)&logicalPalette);void CxxxxiangView:OnSize(UINT nType, int cx, int cy)CView:OnSize(nType, cx, cy);glViewport(0,0,cx,cy);GLdouble aspect_ratio;aspect_ratio = (GLdouble)cx/(GLdouble)cy;glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(50.0F, aspect_rati

25、o, 0.2F, 30000.0F);glMatrixMode(GL_MODELVIEW);glLoadIdentity();void CxxxxiangView:RenderScene() glLoadIdentity(); GLfloat ambient2 = 0.1, 0.1, 0.1, 0.6 ; GLfloat ambient1 = 0.5, 0.5, 0.5, 1.0 ; GLfloat ambient0 = 0.5, 0.0, 0.0, 1.0 ; GLfloat no_mat = 0.0, 0.0, 0.0, 1.0 ;GLfloat mat_ambient = 0.7, 0.

26、7, 0.7, 1.0 ;GLfloat mat_ambient2 = 0.1, 0.1, 0.4, 1.0 ;GLfloat mat_ambient3 = 0.1, 0.1, 0.6, 1.0 ;GLfloat mat_ambient_color = 0.0, 0.8, 0.0, 1.0 ;GLfloat mat_diffuse = 0.1, 0.5, 0.8, 1.0 ;GLfloat mat_diffuse1 = 0.6, 0.6, 0.0, 1.0 ;GLfloat mat_specular = 1.0, 1.0, 1.0, 1.0 ;GLfloat no_shininess = 0.

27、0 ;GLfloat low_shininess = 5.0 ;GLfloat high_shininess = 128.0 ;GLfloat mat_emission = 0.3, 0.2, 0.2, 0.0;GLfloat mat_diffuse2 = 0.8, 0.8, 0.8, 0.4 ;GLfloat mat_diffuse3 = 0.0, 1.0, 0.0, 0.5 ;GLfloat mat_diffuse4 = 128.0/255, 64.0/255, 65.0/255, 1.0 ;GLfloat mat_diffuse5 = 0.8, 0.8, 0.8, 1.0 ;GLfloa

28、t light_position = 500.0, 500.0, 500.0, 1.0 ; GLfloat light_position1 = -400.0, -300.0, -500.0, 1.0 ; glClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);/清除背景 if (m_viewmode=0)/ 飞翔模式glTranslatef(xx,yy,zz);glRotated(nAngleX,1,0,0);glRotated(nAngleY,0,1,0);glRotated(nAngleZ,0,0,1);glTranslatef( - (bb.x

29、max+bb.xmin) /2 , - (bb.ymax + bb.ymin) /2 , -(bb.zmax + bb.zmin) /2);else/ 驾驶模式gluLookAt( eye.x, eye.y, eye.z, center.x, center.y, center.z, 0, 1, 0 );glDisable(GL_LIGHTING); glDisable(GL_LIGHT1);glDisable(GL_TEXTURE_2D);glEnable(GL_LIGHTING); glEnable(GL_LIGHT1);glEnable(GL_TEXTURE_2D);/ Enable Te

30、xture MappingglTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);glDisable (GL_BLEND);obj.ShowModel();glEnable (GL_BLEND);if (m_viewmode=1)glColor3f(1.0f,0.0f,1.0f);char s200;sprintf(s,"前进速度:%f m/s",step);font.PrintText(s,-6.5f,4.0f);sprintf(s,"移动距离:%f m",total_distance);fo

31、nt.PrintText(s,4.5f,4.0f);sprintf(s,"移动角度:%f 度",car_rotation);font.PrintText(s,-6.5f,-4.0f);auxS();S(m_pDC->GetSafeHdc();/ 交互缓冲区void CxxxxiangView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)switch(nChar) case 'Q':m_viewmode+;m_viewmode=m_viewmode%2;RenderScene();break;case

32、VK_LEFT:nAngleY-;RenderScene();break;case VK_RIGHT:nAngleY+;RenderScene();break;case VK_UP:nAngleX-;RenderScene();break;case VK_DOWN:nAngleX+;RenderScene();break;case 'D':nAngleZ-;RenderScene();break;case 'U':nAngleZ+;RenderScene();break;case 'F':zz=zz + zstep;RenderScene();b

33、reak;case 'B':zz=zz - zstep;RenderScene();break;case 'L':xx = xx + zstep ;RenderScene();break;case 'R':xx = xx - zstep ;RenderScene();break;case '1':yy = yy - zstep ;RenderScene();break;case '2':yy = yy + zstep ;RenderScene();break;case 'Z':eye.x= eye.

34、x + step*cos(pi *car_rotation/180);eye.z= eye.z +step*sin(pi *car_rotation/180);center.x= center.x +step*cos(pi *car_rotation/180);center.z= center.z +step*sin(pi *car_rotation/180);RenderScene();break;case 'X':eye.x= eye.x - step*cos(pi *car_rotation/180);eye.z= eye.z -step*sin(pi *car_rota

35、tion/180);center.x= center.x - step*cos(pi *car_rotation/180);center.z= center.z -step*sin(pi *car_rotation/180);RenderScene();break;case 'C':car_rotation=car_rotation+1;center.x= eye.x + distance*cos(pi *car_rotation/180);center.z= eye.z +distance*sin(pi *car_rotation/180);RenderScene();bre

36、ak;case 'V':car_rotation=car_rotation-1;center.x= eye.x + distance*cos(pi *car_rotation/180);center.z= eye.z +distance*sin(pi *car_rotation/180);RenderScene();break;case '3':SetTimer(100,50,NULL);break;case '4':KillTimer(100);case VK_PRIOR:/ PgUp 加速step=step+0.1;break;case VK

37、_NEXT:/ PgDn 减速step=step-0.1;break;CView:OnKeyDown(nChar, nRepCnt, nFlags);void CxxxxiangView:OnTimer(UINT_PTR nIDEvent)total_distance=total_distance+step;eye.x= eye.x + step*cos(pi *car_rotation/180);eye.z= eye.z +step*sin(pi *car_rotation/180);center.x= center.x +step*cos(pi *car_rotation/180);cen

38、ter.z= center.z +step*sin(pi *car_rotation/180);RenderScene();CView:OnTimer(nIDEvent);课题二:基于WinSock的信息传输程序的设计1、目标在Windows Socket的原理的基础上,剖析QQ聊天程序的基本功能,设计即时通信的客户机和服务器程序,能够点对点传输文本及图像信息, 2、功能1)服务器端(1)接收来自客户机的登录请求,在文件或数据库中记录客户机的登录网络信息。这些信息包括:用户标识、IP地址等。(2)接收来自客户机的退出请求,在文件或数据库中删除客户机的登录记录。(3)接收客户机的“取得所有用户信

39、息”的请求,并把所有用户的信息发送给客户机。1)客户端(1)把客户机的信息登录到服务器。这些信息包括:用户标识、IP地址等。(2)请求服务器上的所有用户信息(用户标识、IP地址),并读取到客户机本地,作为点对点通信的基础。(3)选择某一用户,进行点对点通信(不再通过服务器)。通信的内容有两种开式:文本信息、图像文件;3.步骤新建一个项目,名称为MyChat。客户端程序:1:建立及于对话筐的MFC工程QQClient#define WM_MSGRECV WM_USER+1/收到好友信息#define WM_SEVMSG WM_USER+2/收到服务器信息#define WM_NOTIFYICON

40、MSG WM_USER+3/托盘消息#define WM_RECVFRIENDDATA WM_USER+4/接收好友信息消息在QQClient.h中定义几个结构体struct UserData/用户信息结构体UINT id;/IDCString Name;/姓名UINT code;/密码BOOL IsOnline;/状态int FriendId10;/好友ID(保留服务器尚不支持)CString ip;/IP地址;以下结果结构体主要用于传递参数struct Param HWND hwnd;SOCKET m_socket; struct SevParamSOCKET m_socket;CStri

41、ng str;SOCKADDR_IN addr;HWND hwnd;struct ReavDataParamSOCKET m_socket;SOCKADDR_IN addr;HWND hwnd;2:加载套接字库在CQQClientApp:InitInstance()函数中加入if(!AfxSocketInit()MessageBox(NULL,"套接字库加载失败!","Error!",MB_OK);return FALSE;#include<afxsock.h>/套接字库支持头文件#include<Mmsystem.h>/播放声音

42、支持头文件3:在CQQClientDlg类中加入以下变量SOCKADDR_IN m_AddrSev;/服务器地址SOCKET m_sevSocket;/与服务器连接套接字SOCKADDR_IN m_SevAddr;/本机地址SOCKADDR_IN m_SendToAddr;/发送信息地址SOCKET SendToSocket;/发送信息套接字SOCKET m_sendSocket;/接收好友信息套接字CString m_msg;/发送信息4:在CQQClientDlg类中加入成员函数CQQClientDlg:InitSocket()(功能初试华套接字和找到本机IP地址)函数实现如下:BOOL

43、CQQClientDlg:InitSocket()m_listenSocket=socket(AF_INET,SOCK_DGRAM,0);if(m_listenSocket=INVALID_SOCKET)MessageBox("接收套接字创建失败!");return FALSE;char hostname50;int Result;Result=gethostname(hostname,50);if(Result!=0)MessageBox("主机查找错误!","Error!",MB_OK);return FALSE;HOSTENT*

44、 hst=NULL;struct in_addr ia; m_strIP=""hst = gethostbyname(LPCTSTR)hostname); for(int i=0;hst->h_addr_listi;i+) memcpy(&ia.s_addr,hst->h_addr_listi,sizeof(ia.s_addr); strTemp.Format("%sn",inet_ntoa(ia);SOCKADDR_IN SevAddr;SevAddr.sin_addr=ia;/S_un.S_addr=htonl(INADDR_AN

45、Y);SevAddr.sin_family=AF_INET;SevAddr.sin_port=htons(6000);m_AddrSev.sin_addr=ia;AddrMsgSend.sin_addr=ia;/.S_un.S_addr=htonl(dlg1.ip); AddrMsgSend.sin_family=AF_INET;AddrMsgSend.sin_port=htons(6000);Result=bind(m_listenSocket,(sockaddr*)&SevAddr,sizeof(SOCKADDR);if(Result=SOCKET_ERROR)MessageBox

46、("套节字帮定失败!");closesocket(m_listenSocket);return FALSE;return TRUE;5:增加登陆窗口CInfoDlg类界面设计如下:在CInfoDlg:OnInitDialog()中加入 GetWindowRect(&m_strrc);GetWindowRect(&m_rect); m_rect.bottom=m_rect.top;m_rect.bottom+=20; IsExplore=FALSE; m_strrc.bottom-=150; SetWindowRect();SetTimer(1,1200,NU

47、LL); (CEdit*)GetDlgItem(IDC_EDIT_NAME)->SetWindowText(""); (CEdit*)GetDlgItem(IDC_EDIT_CODE)->SetWindowText(""); m_str=”" /滚动文字 m_nPort=6020;/UpdateData(FALSE);msgType=1;/默认为登陆增加申请号码响应函数CInfoDlg:OnUserApp()在函数中加入CAppIdDlg dlg;/ if(dlg.DoModal()=IDOK)/显示申请号码msgType=2;/把

48、消息改为申请号码msg.Format("%d#%s%d",msgType,dlg.m_username,dlg.m_usercode);m_id=0;m_code=0;UpdateData(FALSE);增加函数void CInfoDlg:SetWindowRect()/改变窗口大小SetWindowPos(NULL,m_strrc.left,m_strrc.top,m_strrc.Width(),m_strrc.Height(),SWP_SHOWWINDOW);增加TIMER消息并加入代码static int i=0;m_bitmap.DeleteObject();swi

49、tch(i%8)/改变位图case 0:m_bitmap.LoadBitmap(IDB_BITMAP1);break;case 1:m_bitmap.LoadBitmap(IDB_BITMAP2);break;i+; InvalidateRect(NULL); if(m_rect.bottom-m_rect.top>=300)/实现滚动文字m_rect.top=m_rect.bottom; m_rect.top-=10; (CStatic*)GetDlgItem(IDC_STATIC_BT)->SetBitmap(m_bitmap);增加登陆函数void CInfoDlg:OnOK

50、() (CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS)->GetAddress(ip);if(msgType=1)UpdateData(); msg.Format("%d#%d%d",msgType,m_id,m_code);CDialog:OnOK();6:增加字定义消息处理函数在消息映射表中加入函数实现如下:void CQQClientDlg:OnMsgRecv(WPARAM wParam,LPARAM lParam)m_SevAddr=*(SOCKADDR_IN*)wParam;int i=str.Find("",0);CString Name=str.Left(i);:sndPlaySound("C:ProgramFilesMyQQmsg.wav",SND_); dlg.m_msg=str.Right(str.GetLength()-i-1);dlg.m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论