ABCBank(MFC版)

本文分享了使用MFC为ABCBank项目开发GUI的过程,包括界面设计、密码控件设置及客户端与服务器的通信连接代码。介绍了如何处理窗口间联系、线程创建等问题。

       之前在控制台写完了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("错误信息");显示在窗口中,能够较好的利用句柄对不同的控件间的进行操作。总的框架目前是这样,之后会继续对界面进行修改,让之更加“逼真“一些。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值