zoukankan      html  css  js  c++  java
  • 基于VC的MFC界面开发

    教你熟悉VC6.0创建一个可视化软件的过程

    UpdateData(TRUE);//将输入数据赋给文本框变量。
    UpdateData(FALSE);//将内容显示在文本框中
    AfxMessageBox("演示弹窗");
    

    当使用弹窗的时候会阻塞进程。

    使用VC++6.0开发一个弹窗程序

    进阶(未实现):VC++6.0可视化窗口怎么填加图片

    本例是基于C语言实现的Windows socket的编程。

    注意,在新建时不要勾选“Windows Socket”,因为用到了<winsock2.h>,勾选后会报错,说有一个结构体被定义了两次:

    (这前面是你的VC安装路径)includewinsock2.h(99) : error C2011: 'fd_set' : 'struct' type redefinition
    

    参考代码如下:

    // 333Dlg.cpp : implementation file
    //客户端
    
    #include "stdafx.h"
    #include "333.h"
    #include "333Dlg.h"
    
    #include <stdlib.h> 
    #include<Winsock2.h>
    #pragma comment (lib,"ws2_32.lib")
    #define BUFFER_SIZE 1024 
    #define MY_PORT 3434
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    /////////////////////////////////////////////////////////////////////////////
    // CMy333Dlg dialog
    
    CMy333Dlg::CMy333Dlg(CWnd* pParent /*=NULL*/)
    	: CDialog(CMy333Dlg::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(CMy333Dlg)
    	m = _T("");
    	//}}AFX_DATA_INIT
    	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CMy333Dlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CMy333Dlg)
    	DDX_Text(pDX, IDC_EDIT1, m);
    	//}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(CMy333Dlg, CDialog)
    	//{{AFX_MSG_MAP(CMy333Dlg)
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
    	ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CMy333Dlg message handlers
    
    BOOL CMy333Dlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	// Set the icon for this dialog.  The framework does this automatically
    	//  when the application's main window is not a dialog
    	SetIcon(m_hIcon, TRUE);			// Set big icon
    	SetIcon(m_hIcon, FALSE);		// Set small icon
    	
    	// TODO: Add extra initialization here
    	
    	return TRUE;  // return TRUE  unless you set the focus to a control
    }
    
    // If you add a minimize button to your dialog, you will need the code below
    //  to draw the icon.  For MFC applications using the document/view model,
    //  this is automatically done for you by the framework.
    
    void CMy333Dlg::OnPaint() 
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // device context for painting
    
    		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
    
    		// Center icon in client rectangle
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
    
    		// Draw the icon
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDialog::OnPaint();
    	}
    }
    
    // The system calls this to obtain the cursor to display while the user drags
    //  the minimized window.
    HCURSOR CMy333Dlg::OnQueryDragIcon()
    {
    	return (HCURSOR) m_hIcon;
    }
    
    void CMy333Dlg::OnButton1() 
    {
    	// TODO: Add your control notification handler code here
    		// TODO: Add your control notification handler code here
    	SOCKET conn_sock;
    	struct sockaddr_in client_addr;
    	//WSA初始化
    	WSADATA wsadata;
    	WSAStartup(MAKEWORD(1,1),&wsadata);
    	//配置connect
    	conn_sock = socket(AF_INET,SOCK_STREAM,0);
    	bind(conn_sock,(struct sockaddr*)&client_addr,sizeof(struct sockaddr));
    	//配置server addr
    	client_addr.sin_family = AF_INET;
    	client_addr.sin_port = htons(MY_PORT);
    	client_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    	//链接
    	connect(conn_sock,(struct sockaddr *)&client_addr,sizeof(struct sockaddr));
    	//接收
    	char rc[100] = "";
    	recv(conn_sock,rc,sizeof(rc),0);
    	//printf("From Server : %s
    ",rc);
    	AfxMessageBox("连接成功!");
    	//输入路径
    	//printf("Please input path:
    ");
    	//char path[100];
    	//scanf("%s",&path);
    	//发送路径
    	//send(conn_sock,path,strlen(path),0);
    	//打开文件,准备写入 
    	FILE * fp = fopen(m, "rt"); 
    	if(NULL == fp) 
    	{	 
    		//printf("File: %s Can Not Open To Write
    ", path); 
    		AfxMessageBox("打开文件失败!");
    		system("pause"); 
    		exit(1); 
    	} 
    	else
    	{ 
    		char buffer[BUFFER_SIZE]; 
    		memset(buffer, 0, BUFFER_SIZE);
    		int length = 0;  
    		//发送文件内容,直到读不到文件
    		while((length = fread(buffer, sizeof(char), BUFFER_SIZE, fp)) > 0) 
    		{ 
    			if (send(conn_sock, buffer, length, 0) < 0)//向服务端发送 
    			{ 
    				//printf("Send File: %s Failed
    ", path); 
    				AfxMessageBox("发送失败!");
    				break; 
    			} 
    			memset(buffer, 0, BUFFER_SIZE); 
    		} 
    		//printf("File: %s Transfer Successful!
    ", path); 
    		AfxMessageBox("发送成功!");
    	}   
    	fclose(fp); //关闭文件
    	closesocket(conn_sock);
    	WSACleanup();
    }
    
    void CMy333Dlg::OnChangeEdit1() 
    {
    	// TODO: If this is a RICHEDIT control, the control will not
    	// send this notification unless you override the CDialog::OnInitDialog()
    	// function and call CRichEditCtrl().SetEventMask()
    	// with the ENM_CHANGE flag ORed into the mask.
    	
    	// TODO: Add your control notification handler code here
    	UpdateData(TRUE);//将输入数据赋给文本框变量。
    	UpdateData(FALSE);//将内容显示在文本框中
    }
    
    
    // 111Dlg.cpp : implementation file
    //服务器端
    
    #include "stdafx.h"
    #include "111.h"
    #include "111Dlg.h"
    #include <Winsock2.h>
    #pragma comment (lib,"ws2_32.lib")
    #define BUFFER_SIZE 1024 
    #define MY_PORT 3434
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    
    
    
    /////////////////////////////////////////////////////////////////////////////
    // CMy111Dlg dialog
    
    CMy111Dlg::CMy111Dlg(CWnd* pParent /*=NULL*/)
    	: CDialog(CMy111Dlg::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(CMy111Dlg)
    	m = _T("");
    	//}}AFX_DATA_INIT
    	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CMy111Dlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CMy111Dlg)
    	DDX_Text(pDX, IDC_EDIT1, m);
    	//}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(CMy111Dlg, CDialog)
    	//{{AFX_MSG_MAP(CMy111Dlg)
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	ON_BN_CLICKED(IDC_BUTTON1, OnStart)
    	ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CMy111Dlg message handlers
    
    BOOL CMy111Dlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	// Set the icon for this dialog.  The framework does this automatically
    	//  when the application's main window is not a dialog
    	SetIcon(m_hIcon, TRUE);			// Set big icon
    	SetIcon(m_hIcon, FALSE);		// Set small icon
    	
    	// TODO: Add extra initialization here
    	
    	return TRUE;  // return TRUE  unless you set the focus to a control
    }
    
    // If you add a minimize button to your dialog, you will need the code below
    //  to draw the icon.  For MFC applications using the document/view model,
    //  this is automatically done for you by the framework.
    
    void CMy111Dlg::OnPaint() 
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // device context for painting
    
    		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
    
    		// Center icon in client rectangle
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
    
    		// Draw the icon
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDialog::OnPaint();
    	}
    }
    
    // The system calls this to obtain the cursor to display while the user drags
    //  the minimized window.
    HCURSOR CMy111Dlg::OnQueryDragIcon()
    {
    	return (HCURSOR) m_hIcon;
    }
    
    void CMy111Dlg::OnStart() 
    {
    	// TODO: Add your control notification handler code here
    	//WSA初始化
    	WSADATA wsadata;
    	char *buffer = "Welcome ! Server connected.";//字符串
    	struct sockaddr_in server_addr;
    	SOCKET listen_socket;
    	WSAStartup(MAKEWORD(1,1),&wsadata);
    	
    
    	//配置server addr
    
    	server_addr.sin_family = AF_INET;
    	server_addr.sin_port = htons(MY_PORT);
    	server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    
    	
    	//配置listener
    	listen_socket = socket(AF_INET,SOCK_STREAM,0);
    	bind(listen_socket,(struct sockaddr*)&server_addr,sizeof(struct sockaddr));
    	int flag = 1;
    	while (flag)
    	{
    		//开始监听
    		listen(listen_socket,5);
    		int dummy = sizeof(SOCKADDR);
    		//printf("Listening to client...
    ");
    		AfxMessageBox("等待客户端连接......");
    		//建立连接
    		SOCKET new_socket = accept(listen_socket,NULL,&dummy);
    		//printf("Client connected!
    ");
    		AfxMessageBox("连接成功!准备从客户端接收文件......");
    		//发送信息
    		send(new_socket,buffer,strlen(buffer),0);
    		char rc[100] = "";
    		//recv(new_socket,rc,sizeof(rc),0);
    		//printf("File name from Client : %s
    ",rc);
    		//char path[100];
    		char buf[999];
    		//printf("Please set a path to save file:
    ");
    		
    		FILE * fp = fopen(m, "wt");//以写入的方式打开文件
    		if (NULL == fp) 
    		{ 
    			//printf("File: %s Not Found
    ", path); 
    			AfxMessageBox("写入文件失败!");
    		} 
    		else
    		{ 
    			memset(buf, 0, BUFFER_SIZE); 
    			unsigned int length = 0; 
    			//接受到客户端发来的文件数据
    			while ((length = recv(new_socket, buf, BUFFER_SIZE, 0)) > 0) 
    			{ 
    				//把发来的数据写入到文件中
    				if (fwrite(buf, sizeof(char), length, fp) < length) 
    				{ 
    					//printf("File: %s Write Failed
    ", path); 
    					AfxMessageBox("接收失败!");
    					break; 
    				} 
    				memset(buf, 0, BUFFER_SIZE); 
    			} 
    			//printf("Receive File: %s From Server Successful!
    ", path); 
    			AfxMessageBox("接收成功!");
    			flag = 0;
    		} 
    		fclose(fp); //关闭文件
    		closesocket(new_socket);
    		
    	}
    	
    
    
    
    	closesocket(listen_socket);
    	WSACleanup();
    
    }
    
    void CMy111Dlg::OnChangeEdit1() 
    {
    	// TODO: If this is a RICHEDIT control, the control will not
    	// send this notification unless you override the CDialog::OnInitDialog()
    	// function and call CRichEditCtrl().SetEventMask()
    	// with the ENM_CHANGE flag ORed into the mask.
    	
    	// TODO: Add your control notification handler code here
    	UpdateData(TRUE);//将输入数据赋给文本框变量。
    	UpdateData(FALSE);//将内容显示在文本框中
    }
    
    
  • 相关阅读:
    BZOJ1527 : [POI2005]Pun-point
    2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016)
    2016-2017 ACM-ICPC Northwestern European Regional Programming Contest (NWERC 2016)
    NAIPC-2016
    BZOJ2498 : Xavier is Learning to Count
    ACM ICPC Vietnam National Second Round
    XVI Open Cup named after E.V. Pankratiev. GP of Ukraine
    XVI Open Cup named after E.V. Pankratiev. GP of Peterhof
    HDU5509 : Pattern String
    BZOJ4583 : 购物
  • 原文地址:https://www.cnblogs.com/maxeysblog/p/9956959.html
Copyright © 2011-2022 走看看