【VC开源代码栏目提醒】:网学会员,鉴于大家对VC开源代码十分关注,论文会员在此为大家搜集整理了“ClientSheetDlg.cpp”一文,供大家参考学习!
// ClientSheetDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "ECClient.h"
#include "ClientSheetDlg.h"
#include ".\clientsheetdlg.h"
#include "MyInfoPage.h"
#include "BookInfoPage.h"
// CClientSheetDlg
//////////全局变量
CClientSheetDlg* pDlg;//窗口指针,便于线程执行体获得
bool ThreadRun = true;//线程的控制参数
IMPLEMENT_DYNAMIC(CClientSheetDlg, CPropertySheet)
CClientSheetDlg::CClientSheetDlg(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
}
CClientSheetDlg::CClientSheetDlg(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
AddPage(&myinfopage);//加入个人信息属性页
AddPage(&bookinfopage); //加入书目信息属性页
}
CClientSheetDlg::~CClientSheetDlg()
{
LogOut();
}
BEGIN_MESSAGE_MAP(CClientSheetDlg, CPropertySheet)
ON_WM_CLOSE()
END_MESSAGE_MAP()
// CClientSheetDlg 消息处理程序
BOOL CClientSheetDlg::OnInitDialog()
{
BOOL bResult = CPropertySheet::OnInitDialog();
// TODO: 在此添加您的专用代码
//隐藏属性页默认按钮
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE);
GetDlgItem(IDHELP)->ShowWindow(SW_HIDE);
GetDlgItem(12321)->ShowWindow(SW_HIDE);
//设置窗体位置
CRect rectWnd;
GetWindowRect(rectWnd);
SetWindowPos(NULL, 0, 0,rectWnd.Width() ,rectWnd.Height()-25,SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
//清空个人信息
ZeroMemory(&m_info,sizeof(m_info));
pDlg = this;//全局变量用来维护窗体指针
CreateClientSocket();//创建客户端socket
Login();//登陆
return bResult;
}
int CClientSheetDlg::Login(void)//登陆
{
CLogin logindlg;
DataPack datapack;
memset(&datapack,0,DATAPACK_SIZE);
INT_PTR nResponse = logindlg.DoModal();//显示登陆对话框
if(nResponse == IDOK)
{
char* m_pserver_ip = new char[16];
strcpy(m_pserver_ip,SERVER_IP);//得到服务器ip
//用户登陆
datapack.flag = LOGIN;
datapack.DataInfo.user.id =atoi(logindlg.m_id.GetBuffer(0)) ;//用户号码
strcpy(datapack.DataInfo.user.name,logindlg.m_nikyname);//用户名
strcpy(datapack.DataInfo.user.password,logindlg.m_password); //用户密码
if((m_psocket->Connect(m_pserver_ip,PORT_LISTEN))==0)//连接成功
{
m_psocket->Send((char*)&datapack,DATAPACK_SIZE);
//创建接收数据的工作线程
AfxBeginThread(ThreadProc,this->GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
}
}
else
{
exit(0);
}
return 0;
}
UINT CClientSheetDlg::ThreadProc(LPVOID lpram)//接收或者发送数据的管理线程
{
char* buf = new char[DATAPACK_SIZE];//数据接收缓冲区
DataPack* m_pdatapack = new DataPack();
while(ThreadRun)//bool变量ThreadRun设置程序的运行状态
{
memset(buf,0,DATAPACK_SIZE);
memset(m_pdatapack,0,DATAPACK_SIZE);
pDlg->m_psocket->Recv(buf,DATAPACK_SIZE);//接收数据
m_pdatapack = (DataPack*)buf;
switch(m_pdatapack->flag)
{
case LOGINSUCCESS:
{ //用户登陆成功
pDlg->SetUserInfo(m_pdatapack->DataInfo.user);
break;
}
case BOOK:
{ //书目信息
pDlg->SetBookInfo(m_pdatapack->DataInfo.book);
break;
}
case BUYBOOK_SUCCESS:
{ //购书成功
pDlg->SetBuyBookInfo(m_pdatapack->DataInfo.buyitem);
break;
}
case DROPBOOK_SUCCESS:
{ //退书成功
pDlg->DropBookSuccess(m_pdatapack->DataInfo.buyitem);
break;
}
}
}
AfxEndThread(0);//结束线程
return 0;
}
int CClientSheetDlg::SetUserInfo(User& user)//保存个人信息
{
CMyInfoPage* m_pinfopage = (CMyInfoPage*)pDlg->GetPage(0);
m_pinfopage->SetUserInfo(user);//在界面上显示个人信息
//保存个人信息
m_info.id = user.id;
strcpy(m_info.name,user.name);
strcpy(m_info.password,user.password);
return 0;
}
int CClientSheetDlg::SetBookInfo(Book& book)//保存书目信息
{
BOOL ret = this->SetActivePage(1);
CBookInfoPage* m_pbookpage = (CBookInfoPage*)pDlg->GetPage(1);
m_pbookpage->SetBookInfo(book); //在界面上显示书目信息
return 0;
}
int CClientSheetDlg::BuyBook(long book_id,CString book_name, int buy_num)//买书处理
{
DataPack datapack;
memset(&datapack,0,DATAPACK_SIZE);
datapack.flag = BUYBOOK;
datapack.DataInfo.buyitem.book.book_id = book_id;
strcpy(datapack.DataInfo.buyitem.book.book_name,book_name);
datapack.DataInfo.buyitem.buy_num = buy_num;
datapack.DataInfo.buyitem.user.id = m_info.id;
//向服务器发送购书信息
m_psocket->Send((const char*)&datapack,DATAPACK_SIZE);
return 0;
}
int CClientSheetDlg::SetBuyBookInfo(BuyItem& buyitem)//购书后的界面显示
{
CMyInfoPage* m_pinfopage = (CMyInfoPage*)pDlg->GetPage(0);
m_pinfopage->SetBuyBookInfo(buyitem);//显示用户购书信息
return 0;
}
int CClientSheetDlg::DropBook(int book_id)//退购
{
DataPack datapack;
memset(&datapack,0,DATAPACK_SIZE);
datapack.flag = DROPBOOK;
datapack.DataInfo.buyitem.book.book_id = book_id;
datapack.DataInfo.buyitem.user.id = m_info.id;
//向服务器发送退购信息
m_psocket->Send((const char*)&datapack,DATAPACK_SIZE);
return 0;
}
int CClientSheetDlg::DropBookSuccess(BuyItem& buyitem)//退购成功
{
CMyInfoPage* m_pinfopage = (CMyInfoPage*)pDlg->GetPage(0);
m_pinfopage->DropBook(buyitem);
return 0;
}
int CClientSheetDlg::LogOut(void)//退出
{
DataPack datapack;
memset(&datapack,0,DATAPACK_SIZE);
//退出消息
datapack.flag = LOGOUT;
datapack.DataInfo.user.id = m_info.id;
m_psocket->Send((const char*)&datapack,DATAPACK_SIZE);
//关闭socket
m_psocket->Close();
ThreadRun = false;//数据收发线程停止工作
return 0;
}
int CClientSheetDlg::CreateClientSocket(void)//创建客户端socket
{
m_psocket = new TCPSocket();
if((m_psocket->Create(0))==false)//创建套接字
{
AfxMessageBox("Socket Create Failed");
exit(0);
}
return 0;
}
上一篇:
ClientPlusDlg.cpp
下一篇:
西班牙语童话:El Alimento de Dios