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);//将内容显示在文本框中
    }
    
    
  • 相关阅读:
    LVS实现负载均衡原理及安装配置 负载均衡
    Jexus-5.6.3使用详解
    公共笔记
    net 网站过滤器 mvc webapi
    WebApi 生成帮助文档及顺便创建简单的测试工具
    Dapper.NET——轻量ORM
    C# Entity Framework并发处理
    linq 日常关键字使用
    解决nginx负载均衡的session共享问题
    table中实现数据上移下移效果
  • 原文地址:https://www.cnblogs.com/maxeysblog/p/9956959.html
Copyright © 2011-2022 走看看