之前在控制台写完了ABCBank项目,但是没有界面,所以这几天也是有空就边学MFC边将MFC中的操作应到项目中来,做一个界面。下面是完成的基本情况:
在这个密码编辑框里,将控件的password属性改为FALSE就会出现******字样,这在之前需要我们编写代码来实现这一功能,因而方便了不少,输入的数据要求和之前一样,通过代码来实现。处理消息的服务器一端并没有进行改动,客户端则放在MFC中进行重新编写,下面是客户端与服务器进行通信连接的代码段,放在主界面的构造函数之中:
CABCBankDlg::CABCBankDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CABCBankDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
//检查协议栈安装情况
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return ;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||HIBYTE( wsaData.wVersion ) != 2 )
{
WSACleanup( );
return ;
}
//创建监听套接口
sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == INVALID_SOCKET)
{
cout<<"error with code = "<<WSAGetLastError()<<endl;
exit(1);
}
//初始化服务器地址结构
sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
servaddr.sin_port = htons(8888);
//连接服务器
int ret;
ret = connect(sock, (sockaddr*)&servaddr, sizeof(servaddr));
if (ret == -1)
{
cout<<"2error with code = "<<WSAGetLastError()<<endl;
exit(1);
}
sock_pre = sock ;
/*HANDLE jubin = AfxBeginThread(read_inforfrom,(LPVOID)sock,THREAD_PRIORITY_NORMAL,0,0,NULL);//c创建一个线程
WaitForSingleObject(jubin, INFINITE);*/
DWORD ThreadID;//创建一个线程用来读服务器发过来的消息
HANDLE handle = CreateThread(NULL,0,read_inforfrom,(LPVOID )sock ,0,&ThreadID);
if(NULL == handle)
{
cout<<"错误原因是"<<GetLastError()<<endl ;
exit(1);
}
WaitForSingleObject(handle,0);
CloseHandle(handle);
}
注册界面:
登陆之后会进入功能界面:
每一个功能都可以用之前的控制台代码段去实现,由于在mfc里都是放在类中去操作,需要你创建大量的文件,而不同的文件经常会共用同一变量的数据,但是若包含同样的头文件就会发生重定义的错误,这里可以用extern关键字来解决共享的问题,客户端的线程可以采用mfc中的创建线程方法来实现读写的不同操作,当然c++中的线程同样适用,
开户:
跟其他几个功能一样,根据需求做出对应的控件并放在合理的位置,这里的确定按钮若符合要求则执行功能,若不符合要求,也应创建一个对话框来给“客户”一个友好的提示,取消则直接返回功能的界面,存储数据依旧是放在mysql中,服务器进行相应的操作,在账单查询中:
这里是用MFC中的CFile进行操作,从文件中以结构体的大小将数据依次读出来,并显示在控件的静态文本中,但是现在有一个不足的地方,就是数据一旦位数不同,整体上就会参差不齐,很不好看,之后会对此进行修改。
其余功能的实现方式之前也有说过,大体上是没有什么变化的,在MFC中操作要注意好每个窗口间的联系,检查错误时用AfxMessageBox("错误信息");显示在窗口中,能够较好的利用句柄对不同的控件间的进行操作。总的框架目前是这样,之后会继续对界面进行修改,让之更加“逼真“一些。
本文分享了使用MFC为ABCBank项目开发GUI的过程,包括界面设计、密码控件设置及客户端与服务器的通信连接代码。介绍了如何处理窗口间联系、线程创建等问题。
802

被折叠的 条评论
为什么被折叠?



