您的当前位置:首页正文

VC实训报告

2021-03-01 来源:步旅网


计算机软件技术专业

《VC++专业项目设计》课程设计报告

——三维环境的漫游程序设计

——基于WinSock的信息传输程序的设计

设计名称:VC++专业项目设计课程实习 班 级:软件09-1 姓 名:杨超群 学 号:0930183137

设计时间:2011年6月13日至2011年7月1日 指导教师:李昌领

1

2

一、课程实习准备工作

1、熟悉课程设计任务,明确设计内容。根据设计任务书给出的课题要求,理清思路,明确设计内容。

2、根据课程设计内容,查找有关编程资料。

2、根据设计内容的编程特点,准备实验环境和开发工具、文档书写工具。

二、实习任务、目的

综合利用VC++有关Windows编程的知识与技术实现对3D虚拟场景的建模、导入、显示与漫游。深入socket通信编程,完成基本的文本、图像信息的传输,模拟基本QQ会话功能。初步掌握利用VC++进行较大规模、功能比较复杂的任务的设计方法与技巧。

二、实习过程、内容

课题一:《三维环境的漫游程序设计》

1、目标

在OpenGL的基础上,分别以飞行模式和驾驶模式漫游室外场景或室内场景。

2、功能

1)程序应支持两种模式,一是飞翔模式,二是驾驶模式。 2)飞翔模式中应支持的功能有:

(1)前后飞行。沿Z轴正方向、反方向运动; (2)左右飞行。沿X轴正方向、反方向运动; (3)上下飞行。沿Y轴正方向、反方向运动; (4)场景旋转。分别沿X、Y、Z坐标轴旋转; 3)驾驶模式中应支持的功能有:

(1)显示即时运动信息; (2)自动行走;

(3)自动行走过程中,手动左右转弯;

3、基本思路

主要思路如下:

(1)小组讨论,建立什么样的场景,发挥想象力、创造力,创意出虚拟场景方案; (2)针对上述虚拟场景方案,建模人员实施建模; (3)将所建模型导出为3DS文件;

(4)利用相关软件察看文件内容,熟悉场景中的对象名称等内容; (5)导入3DS文件内容,在项目中显示其中的虚拟场景; (6)实现对场景的漫游。

4、场景建模

场景建模的平台主要有两种:一种是3DS MAX,用于景物的实体建模;一种是Photoshop,主要用来设计景物中的纹理贴图,达到真实性的效果。

5、导出模型

主要利用3DS MAX的导出功能,把所建模型输出为3DS文件。

3

图一 导出文件

图二 导出文件对话框

把得到的模型文件拷贝到项目的适当位置,如:

4

图三 项目文档结构图示例

6、建立编程项目环境

(1)建立一个单文档视项目,定好存放位置; (2)定制支持OpenGL环境的资源; (建立步骤详见平时实验及讲稿)。

7、利用第三方软件观察3DS文件中的模型

主要是利用Right Hemisphere公司生产的Deep Exploration软件来观察上面导出的3DS模型。

操作

8、操作3DS模型

在项目中导入3DS文件环境的搭建、从3DS文件中加载模型、显示模型、模型驱动的方法见实验示例。

课题二:《基于WinSock的信息传输程序的设计》

1、目标

在Windows Socket的原理的基础上,剖析QQ聊天程序的基本功能,设计即时通信的客户机和服务器程序,能够点对点传输文本及图像信息,

2、功能

1)服务器端 (1)接收来自客户机的登录请求,在文件或数据库中记录客户机的登录网络信息。 这些信息包括:用户标识、IP地址等。 (2)接收来自客户机的退出请求,在文件或数据库中删除客户机的登录记录。 (3)接收客户机的“取得所有用户信息”的请求,并把所有用户的信息发送给客 户机。

5

1)客户端 (1)把客户机的信息登录到服务器。这些信息包括:用户标识、IP地址等。 (2)请求服务器上的所有用户信息(用户标识、IP地址),并读取到客户机本地, 作为点对点通信的基础。

(3)选择某一用户,进行点对点通信(不再通过服务器)。通信的内容有两种开式: 文本信息、图像文件;

《三维环境的漫游程序设计》

主要程序代码如下:

#include \"stdafx.h\" #include \"Ex_MFC_OpenGL.h\"

#include \"MainFrm.h\"

#ifdef _DEBUG

#define new DEBUG_NEW #endif

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWndEx)

const int iMaxUserToolbars = 10;

const UINT uiFirstUserToolBarId = AFX_IDW_CONTROLBAR_FIRST + 40;

const UINT uiLastUserToolBarId = uiFirstUserToolBarId + iMaxUserToolbars - 1;

6

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)

ON_WM_CREATE()

ON_COMMAND(ID_VIEW_CUSTOMIZE, &CMainFrame::OnViewCustomize)

ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR, &CMainFrame::OnToolbarCreateNew) ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000,

ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000,

ID_VIEW_APPLOOK_WINDOWS_7, ID_VIEW_APPLOOK_WINDOWS_7,

&CMainFrame::OnApplicationLook) &CMainFrame::OnUpdateApplicationLook) END_MESSAGE_MAP()

static UINT indicators[] = { };

CMainFrame::CMainFrame() { }

CMainFrame::~CMainFrame() { }

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {

m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle()

|

CBRS_SIZE_DYNAMIC

|

CBRS_TOOLTIPS | CBRS_FLYBY);

if (!m_wndMenuBar.Create(this)) {

TRACE0(\"未能创建菜单栏\"); return -1; } BOOL bNameValid;

OnApplicationLook(theApp.m_nAppLook);

if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)

return -1;

theApp.m_nAppLook = theApp.GetInt(_T(\"ApplicationLook\"), ID_VIEW_APPLOOK_VS_2008); ID_SEPARATOR, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL,

7

if (CMFCToolBar::GetUserImages() == NULL) { }

{ }

CMFCToolBar::SetUserImages(&m_UserImages); if (m_UserImages.Load(_T(\".\\\\UserImages.bmp\")))

CDockingManager::SetDockingMode(DT_SMART); EnableAutoHidePanes(CBRS_ALIGN_ANY);

EnablePaneMenu(TRUE, ID_VIEW_CUSTOMIZE, strCustomize, ID_VIEW_TOOLBAR); CMFCToolBar::EnableQuickCustomization();

m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockPane(&m_wndMenuBar); DockPane(&m_wndToolBar);

if (!m_wndStatusBar.Create(this)) {

TRACE0(\"未能创建状态栏\"); return -1;

}

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | {

TRACE0(\"未能创建工具栏\"); return -1; }

!m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons

?

IDR_MAINFRAME_256

:

CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || IDR_MAINFRAME))

CMFCPopupMenu::SetForceMenuFocus(FALSE);

CString strToolBarName;

bNameValid = strToolBarName.LoadString(IDS_TOOLBAR_STANDARD); ASSERT(bNameValid);

m_wndToolBar.SetWindowText(strToolBarName); CString strCustomize;

bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE); ASSERT(bNameValid);

m_wndToolBar.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize); InitUserToolbars(NULL, uiFirstUserToolBarId, uiLastUserToolBarId);

m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));

8

}

CList lstBasicCommands; lstBasicCommands.AddTail(ID_FILE_NEW); lstBasicCommands.AddTail(ID_FILE_OPEN); lstBasicCommands.AddTail(ID_FILE_SAVE); lstBasicCommands.AddTail(ID_FILE_PRINT); lstBasicCommands.AddTail(ID_APP_EXIT); lstBasicCommands.AddTail(ID_EDIT_CUT); lstBasicCommands.AddTail(ID_EDIT_PASTE); lstBasicCommands.AddTail(ID_EDIT_UNDO); lstBasicCommands.AddTail(ID_APP_ABOUT); lstBasicCommands.AddTail(ID_VIEW_STATUS_BAR); lstBasicCommands.AddTail(ID_VIEW_TOOLBAR);

lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2003); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_VS_2005); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLUE); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_SILVER); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLACK); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_AQUA); lstBasicCommands.AddTail(ID_VIEW_APPLOOK_WINDOWS_7); CMFCToolBar::SetBasicCommands(lstBasicCommands); return 0;

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { }

#ifdef _DEBUG

void CMainFrame::AssertValid() const { }

void CMainFrame::Dump(CDumpContext& dc) const { } #endif

CFrameWndEx::Dump(dc); CFrameWndEx::AssertValid();

if( !CFrameWndEx::PreCreateWindow(cs) )

return FALSE; return TRUE;

9

void CMainFrame::OnViewCustomize() { }

LRESULT CMainFrame::OnToolbarCreateNew(WPARAM wp,LPARAM lp) { }

void CMainFrame::OnApplicationLook(UINT id) {

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOfficeXP));

break;

case ID_VIEW_APPLOOK_OFF_XP: switch (theApp.m_nAppLook) {

case ID_VIEW_APPLOOK_WIN_2000:

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManager)); break;

theApp.m_nAppLook = id; CWaitCursor wait;

pUserToolbar->EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize); return lres; BOOL bNameValid; CString strCustomize;

bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE); ASSERT(bNameValid);

CMFCToolBar* pUserToolbar = (CMFCToolBar*)lres; ASSERT_VALID(pUserToolbar);

LRESULT lres = CFrameWndEx::OnToolbarCreateNew(wp,lp); if (lres == 0) { }

return 0;

CMFCToolBarsCustomizeDialog* pDlgCust = new CMFCToolBarsCustomizeDialog(this, TRUE pDlgCust->EnableUserDefinedToolbars(); pDlgCust->Create();

10

case ID_VIEW_APPLOOK_OFF_2007_SILVER:

CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Obsid

break;

case ID_VIEW_APPLOOK_OFF_2007_BLACK: default:

CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaB

break;

switch (theApp.m_nAppLook) {

case ID_VIEW_APPLOOK_OFF_2007_BLUE:

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows7));

CDockingManager::SetDockingMode(DT_SMART); break;

case ID_VIEW_APPLOOK_WINDOWS_7: case ID_VIEW_APPLOOK_VS_2008:

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2008)); CDockingManager::SetDockingMode(DT_SMART); break;

case ID_VIEW_APPLOOK_VS_2005:

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005)); CDockingManager::SetDockingMode(DT_SMART); break;

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2003));

CDockingManager::SetDockingMode(DT_SMART); break;

case ID_VIEW_APPLOOK_OFF_2003: case ID_VIEW_APPLOOK_WIN_XP:

CMFCVisualManagerWindows::m_b3DTabsXPTheme = TRUE;

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); break;

lue);

ianBlack);

11

r); ; }

CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silve

CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua)

}

break;

break;

case ID_VIEW_APPLOOK_OFF_2007_AQUA:

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007)); }

RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME

CDockingManager::SetDockingMode(DT_SMART);

| RDW_ERASE);

theApp.WriteInt(_T(\"ApplicationLook\"), theApp.m_nAppLook);

void CMainFrame::OnUpdateApplicationLook(CCmdUI* pCmdUI) { }

BOOL CMainFrame::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext) {

for (int i = 0; i < iMaxUserToolbars; i ++) {

CMFCToolBar* pUserToolbar = GetUserToolBarByIndex(i); if (pUserToolbar != NULL)

if (!CFrameWndEx::LoadFrame(nIDResource, dwDefaultStyle, pParentWnd, pContext)) { }

BOOL bNameValid; CString strCustomize;

bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE); ASSERT(bNameValid);

return FALSE;

pCmdUI->SetRadio(theApp.m_nAppLook == pCmdUI->m_nID);

12

}

}

{ }

pUserToolbar->EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);

return TRUE;

课题二:《基于WinSock的信息传输程序的设计》

客户端:

#include \"stdafx.h\" #include \"Msg.h\"

CMsg::CMsg(CString& preMsg) { }

void CMsg::Init() { }

m_strText=_T(\"\"); m_strText=preMsg;

13

CString CMsg::WhatType() {

}

return m_strText;

CString m=\"preType:\"+preType; AfxMessageBox(m);

m=\"who:\"+m_nomalMsg.who;//+\"\\ntoWho:\"+toWho+\"\\nMessage:\"+msgItem; AfxMessageBox(m);

m=\"toWho:\"+m_nomalMsg.toWho; AfxMessageBox(m);

m=\"Message:\"+m_nomalMsg.msgItem;

AfxMessageBox(m)

begin=end+1;

end=m_strText.Find(\"_\",begin);

m_nomalMsg.toWho=m_strText.Mid(begin,end-begin); begin=end+1;

m_nomalMsg.msgItem=m_strText.Mid(begin); CString preType(\"NULLMSG\"); CString who; CString toWho; CString msgItem; int begin=0; int end=0;

m_strText=\"NOMALMSG_hupeng_jianghe_

if(m_strText.SpanIncluding(\"NOMALMSG\")==\"NOMALMSG\") {

end=m_strText.Find(\"_\"); begin=end+1;

end=m_strText.Find(\"_\",begin);

m_nomalMsg.who=m_strText.Mid(begin,end-begin);

preType=m_strText.Mid(begin,end-begin);

// end=m_strText.Find(\"_\

// Client.cpp : Defines the class behaviors for the application. //

#include \"stdafx.h\" #include \"Client.h\" #include \"ClientDlg.h\"

14

#ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

///////////////////////////////////////////////////////////////////////////// // CClientApp

BEGIN_MESSAGE_MAP(CClientApp, CWinApp)

///////////////////////////////////////////////////////////////////////////// // CClientApp construction

CClientApp::CClientApp() { }

///////////////////////////////////////////////////////////////////////////// // The one and only CClientApp object

CClientApp theApp;

///////////////////////////////////////////////////////////////////////////// // CClientApp initialization

BOOL CClientApp::InitInstance() {

AfxEnableControlContainer(); if (!AfxSocketInit()) { }

AfxMessageBox(IDP_SOCKETS_INIT_FAILED); return FALSE;

// TODO: add construction code here,

// Place all significant initialization in InitInstance //{{AFX_MSG_MAP(CClientApp)

// NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code!

//}}AFX_MSG

ON_COMMAND(ID_HELP, CWinApp::OnHelp)

END_MESSAGE_MAP()

15

#ifdef _AFXDLL }

// LoadDlg.cpp : implementation file //

#include \"stdafx.h\" #include \"Client.h\" #include \"LoadDlg.h\"

#ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

// Since the dialog has been closed, return FALSE so that we exit the // application, rather than start the application's message pump. return FALSE; CClientDlg dlg; m_pMainWnd = &dlg;

int nResponse = dlg.DoModal(); if (nResponse == IDOK) { }

else if (nResponse == IDCANCEL) { }

// TODO: Place code here to handle when the dialog is // dismissed with Cancel

// TODO: Place code here to handle when the dialog is // dismissed with OK Enable3dControls();

// Call this when using MFC in a shared DLL

#else

Enable3dControlsStatic(); // Call this when linking to MFC statically #endif

// Standard initialization

// If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need.

16

///////////////////////////////////////////////////////////////////////////// // CLoadDlg dialog

CLoadDlg::CLoadDlg(CWnd* pParent /*=NULL*/) { }

void CLoadDlg::DoDataExchange(CDataExchange* pDX) { }

BEGIN_MESSAGE_MAP(CLoadDlg, CDialog)

///////////////////////////////////////////////////////////////////////////// // CLoadDlg message handlers

void CLoadDlg::OnOK() {

if(!m_user.IsEmpty()) {

if(AfxMessageBox(\"用户名不能为空,请重新输入\",MB_YESNO)==IDNO) { } else

CDialog::OnOK(); return;

// CClientDlg::SendMsg(BuildLoadMsg());

//{{AFX_MSG_MAP(CLoadDlg) //}}AFX_MSG_MAP

CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CLoadDlg)

DDX_Text(pDX, IDC_EDIT_PASSWORD, m_password); DDX_Text(pDX, IDC_EDIT_USER, m_user); //}}AFX_DATA_MAP

//{{AFX_DATA_INIT(CLoadDlg) m_password = _T(\"\"); m_user = _T(\"\"); //}}AFX_DATA_INIT

: CDialog(CLoadDlg::IDD, pParent)

END_MESSAGE_MAP()

17

}

}

{ }

return;

CDialog::OnOK();

void CLoadDlg::OnCancel() { }

// TODO: Add extra cleanup here

CDialog::OnCancel();

服务端:

// Server.cpp : Defines the class behaviors for the application. //

#include \"stdafx.h\" #include \"Server.h\" #include \"ServerDlg.h\"

#ifdef _DEBUG

18

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

///////////////////////////////////////////////////////////////////////////// // CServerApp

BEGIN_MESSAGE_MAP(CServerApp, CWinApp)

///////////////////////////////////////////////////////////////////////////// // CServerApp construction

CServerApp::CServerApp() { }

///////////////////////////////////////////////////////////////////////////// // The one and only CServerApp object

CServerApp theApp;

///////////////////////////////////////////////////////////////////////////// // CServerApp initialization

BOOL CServerApp::InitInstance() {

// Standard initialization AfxEnableControlContainer(); if (!AfxSocketInit()) { }

AfxMessageBox(IDP_SOCKETS_INIT_FAILED); return FALSE;

// TODO: add construction code here,

// Place all significant initialization in InitInstance //{{AFX_MSG_MAP(CServerApp)

// NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code!

//}}AFX_MSG

ON_COMMAND(ID_HELP, CWinApp::OnHelp)

END_MESSAGE_MAP()

19

// If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need.

#ifdef _AFXDLL }

// ListeningSocket.cpp : implementation file //

#include \"stdafx.h\" #include \"Server.h\"

#include \"ListeningSocket.h\" #include \"ServerDlg.h\"

#ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

/////////////////////////////////////////////////////////////////////////////

// Since the dialog has been closed, return FALSE so that we exit the // application, rather than start the application's message pump. return FALSE; CServerDlg dlg; m_pMainWnd = &dlg;

int nResponse = dlg.DoModal(); if (nResponse == IDOK) { }

else if (nResponse == IDCANCEL) { }

// TODO: Place code here to handle when the dialog is // dismissed with Cancel

// TODO: Place code here to handle when the dialog is // dismissed with OK Enable3dControls();

// Call this when using MFC in a shared DLL

#else

Enable3dControlsStatic(); // Call this when linking to MFC statically #endif

20

// CListeningSocket

CListeningSocket::CListeningSocket() { }

CListeningSocket::CListeningSocket(CServerDlg* pDlg) { }

CListeningSocket::~CListeningSocket() { }

// Do not edit the following lines, which are needed by ClassWizard. #if 0

BEGIN_MESSAGE_MAP(CListeningSocket, CSocket)

//{{AFX_MSG_MAP(CListeningSocket) //}}AFX_MSG_MAP m_pDlg=pDlg;

END_MESSAGE_MAP() #endif // 0

///////////////////////////////////////////////////////////////////////////// // CListeningSocket member functions

void CListeningSocket::OnAccept(int nErrorCode) { }

// Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++

// NOTE: Do not modify the contents of this file. If this class is regenerated by // Microsoft Visual C++, your modifications will be overwritten.

#include \"stdafx.h\" #include \"font.h\"

// TODO: Add your specialized code here and/or call the base class

CSocket::OnAccept(nErrorCode); m_pDlg->OnAccept();

21

///////////////////////////////////////////////////////////////////////////// // COleFont properties

CString COleFont::GetName() { }

void COleFont::SetName(LPCTSTR propVal) { }

CY COleFont::GetSize() { }

void COleFont::SetSize(const CY& propVal) { }

BOOL COleFont::GetBold() { }

void COleFont::SetBold(BOOL propVal) { }

BOOL COleFont::GetItalic() {

BOOL result;

GetProperty(0x4, VT_BOOL, (void*)&result); return result;

SetProperty(0x3, VT_BOOL, propVal); BOOL result;

GetProperty(0x3, VT_BOOL, (void*)&result); return result;

SetProperty(0x2, VT_CY, &propVal); CY result;

GetProperty(0x2, VT_CY, (void*)&result); return result;

SetProperty(0x0, VT_BSTR, propVal); CString result;

GetProperty(0x0, VT_BSTR, (void*)&result); return result;

22

}

void COleFont::SetItalic(BOOL propVal) { }

BOOL COleFont::GetUnderline() { }

void COleFont::SetUnderline(BOOL propVal) { }

BOOL COleFont::GetStrikethrough() { }

void COleFont::SetStrikethrough(BOOL propVal) { }

short COleFont::GetWeight() { }

void COleFont::SetWeight(short propVal) { }

short COleFont::GetCharset()

SetProperty(0x7, VT_I2, propVal); short result;

GetProperty(0x7, VT_I2, (void*)&result); return result;

SetProperty(0x6, VT_BOOL, propVal); BOOL result;

GetProperty(0x6, VT_BOOL, (void*)&result); return result;

SetProperty(0x5, VT_BOOL, propVal); BOOL result;

GetProperty(0x5, VT_BOOL, (void*)&result); return result;

SetProperty(0x4, VT_BOOL, propVal);

23

{ }

void COleFont::SetCharset(short propVal) { }

///////////////////////////////////////////////////////////////////////////// // COleFont operations

// ClientSocket.cpp : implementation file //

#include \"stdafx.h\" #include \"Server.h\" #include \"ClientSocket.h\"

#ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

///////////////////////////////////////////////////////////////////////////// // CClientSocket

CClientSocket::CClientSocket() { }

CClientSocket::CClientSocket(CServerDlg* pDlg) {

m_pDlg=pDlg; /* m_pFile=NULL; }

CClientSocket::~CClientSocket()

m_pArchiveIn=NULL; m_pArchiveOut=NULL;*/

SetProperty(0x8, VT_I2, propVal); short result;

GetProperty(0x8, VT_I2, (void*)&result); return result;

24

{ }

void CClientSocket::Initialize() {

/* m_pFile=new CSocketFile(this); }

/*void CClientSocket::SendMassage(CMsg* msg) { }*/

/*void CClientSocket::ReceiveMessage(CMsg* msg) { }*/

// Do not edit the following lines, which are needed by ClassWizard. #if 0

BEGIN_MESSAGE_MAP(CClientSocket, CSocket)

//{{AFX_MSG_MAP(CClientSocket) //}}AFX_MSG_MAP

// msg->Serialize(*m_pArchiveIn); if(m_pArchiveOut!=NULL) { }

msg->Serialize(*m_pArchiveOut); m_pArchiveOut->Flush();*

m_pArchiveIn=new CArchive(m_pFile,CArchive::load); m_pArchiveOut=new CArchive(m_pFile,CArchive::store);*/

END_MESSAGE_MAP() #endif // 0

///////////////////////////////////////////////////////////////////////////// // CClientSocket member functions

void CClientSocket::OnReceive(int nErrorCode) {

// AfxMessageBox(\"CClientSocket::OnReceive\"); // AfxMessageBox(\"CClientSocket::OnReceive\");

CSocket::OnReceive(nErrorCode); if(nErrorCode==0) m_pDlg->OnReceive(this);

25

}

实训总结

通过这几周的VC++实训,我利用VC++有关Windows编程的知识与技术实现对3D虚拟场景的建模、导入、显示与漫游。深入socket通信编程,完成基本的文本、图像信息的传输,模拟基本QQ会话功能。初步掌握利用VC++进行较大规模、功能比较复杂的任务的设计方法与技巧。

本次实训一共要完成两个课题:三维环境的漫游程序设计和基于WINSOCK的信息传输程序的设计,我通过在网上查找相关的编程资料和向别人请教,最后完成了这两个实训项目。通过这次的实训我感觉到我的专业技能又进步了,而且我明白了学习是永无止尽的,要不断的学习,充实自己,才不会被社会淘汰。

26

因篇幅问题不能全部显示,请点此查看更多更全内容