精华内容
下载资源
问答
  • C++ MFC读写excel

    2021-04-12 14:53:40
    C++ MFC读写excel 直接上,楞干 参考如下两篇文章 ##读取 : https://blog.csdn.net/V10_x/article/details/78464453?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase&depth_1-...

    C++ MFC读写excel

    直接上,楞干
    参考如下两篇文章
    ##读取 : https://blog.csdn.net/V10_x/article/details/78464453?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase

    ##写:参考https://blog.csdn.net/ywx123_/article/details/77074038?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-7.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-7.control

    //

    1、 新建一个基于对话框的MFC应用程序
    2、 添加Excel相关类
    在这里插入图片描述

    打开类向导,添加类下拉框选择类型库中的MFC类,来源选择注册表(不容易出错),可用的类型库选择"Microsoft Excel …"(根据Excel的版本有所不同);接口选择:_Application,_WorkSheet,_WorkBook,Range,WorkSheets,WorkBooks;添加6个必要的类CApplication,CWorkbook,CWorksheet,CRange,CWorkbooks,CWorksheets
    3、
    在stdafx.h中包含,以下头文件,编译。
    #include “CApplication.h”
    #include “CFont0.h”
    #include “CRange.h”
    #include “CWorkbook.h”
    #include “CWorkbooks.h”
    #include “CWorksheet.h”
    #include “CWorksheets.h”

    **屏蔽掉导入每个头文件下的//#import “D:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE” no_namespace
    **编译出现1>c:\users\desktop\exceltest\crange.h(335): warning C4003: “DialogBoxW”宏的实参不足。将DialogBox修改为_DialogBox。

    //定义全局vector
    //存储Excel读取的数据
    vector<CString> vstrType;
    vector<CString> vstrID;
    vector<CString> vstrAlias;
    vector<CString> vstrMCC;
    vector<CString> vstrMNC;
    vector<CString> vstrGroup;
    vector<CString> vstrCou;
    vector<CString> vstrDMOFreq;
    

    导入按钮点击事件

    //导入Excel表格
    
    void ExcelRW::OnBnClickedImportExcel()
    {
     CFileDialog file(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("EXCEL文件(*.xls;*.xlsx)|*.xls;*.xlsx|| " ),AfxGetMainWnd());
    
     if (file.DoModal() == IDOK)
     {
    	 CString strPath = file.GetPathName();//获取到要读取的路径
    	 if ( "" == strPath)
    	 {
    		 //(_T("未选择文件"))
    		 return;
    	 }
    	 getExcelData(strPath);
    	 int ii = vstrType.size();
    	 for (int j=0;j<vstrType.size();j++)
    	 {
    		 char Log[2000];
    		 m_excel_list.SetItemText(j, 1,vstrType[j]);
    		 m_excel_list.SetItemText(j, 2,vstrID[j]);
    		 m_excel_list.SetItemText(j, 3,vstrAlias[j]);
    		 m_excel_list.SetItemText(j, 4,vstrMCC[j]);
    		 m_excel_list.SetItemText(j, 5,vstrMNC[j]);
    		 m_excel_list.SetItemText(j, 6,vstrGroup[j]);
    		 m_excel_list.SetItemText(j, 7,vstrCou[j]);
    		 m_excel_list.SetItemText(j, 8,vstrDMOFreq[j]);
    		 
    	contactinfos[j].TelPhoneNumber[2].TelNumber, contactinfos[j].TelPhoneNumber[3].TelNumber);
    		 OutputDebugStringA(Log);
    		 //contactinfos[j].UserName;
    	 }
     }
    }
    

    导出按钮点击事件

    
    //导出Excel表格
    void ExcelRW::OnBnClickedExportExcel()
    {
    
    	CString strType, strID, strAlias, strMcc, strMnc, strGroupAddr, strCou, strDmoFreq;
    		
    	//1.创建基本对象
    	CApplication App;  //创建应用程序实例
    	CWorkbooks Books;  //工作簿,多个Excel文件
    	CWorkbook Book;    //单个工作簿
    	CWorksheets sheets;//多个sheet页面
    	CWorksheet sheet;  //单个sheet页面
    	CRange range;      //操作单元格
    	//2.打开指定Excel文件,如果不存在就创建
    	char path[MAX_PATH];
    	GetCurrentDirectory(MAX_PATH,(TCHAR*)path);//获取当前路径
    	CString strExcelFile =(TCHAR*) path;
    	CString strdevName = _T("\\Test111111111.xlsx");	   //xls也行
    	strExcelFile += strdevName;
    	COleVariant
    		covTrue((short)TRUE),
    		covFalse((short)FALSE),
    		covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
    
    	LPDISPATCH lpdisp = NULL;
    	//1.创建Excel实例
    	if(!App.CreateDispatch(_T("Excel.Application"),NULL))
    	{
    		AfxMessageBox(_T("创建Excel实例失败"));
    		exit(-1);
    	}
    	else
    	{
    		AfxMessageBox(_T("创建成功"));
    	}
    	App.put_Visible(TRUE);	//打开Excel
    	App.put_UserControl(FALSE);	
    	//2. 得到workbooks容器
    	Books.AttachDispatch(App.get_Workbooks());
    	Book.AttachDispatch(Books.Add(covOptional));
    	sheets.AttachDispatch(Book.get_Worksheets());
    	sheet.AttachDispatch(sheets.get_Item(COleVariant((short)1)));	//获取sheet1
    	sheet.put_Name(_T("TestName"));	    //设置sheet1名字
    
    	//3. 加载要合并的单元格;
    // 	range.AttachDispatch(sheet.get_Range(COleVariant(_T("B2")),COleVariant(_T("E2"))),TRUE);
    // 	range.Merge(COleVariant((long)0));  //合并单元格;
    	range.AttachDispatch(sheet.get_Cells(),TRUE);	
    
    	range.put_Item(COleVariant((long)1),COleVariant((long)1),COleVariant(_T("Type")));
    	range.put_Item(COleVariant((long)1),COleVariant((long)2),COleVariant(_T("ID")));
    	range.put_Item(COleVariant((long)1),COleVariant((long)3),COleVariant(_T("Alias")));
    	range.put_Item(COleVariant((long)1),COleVariant((long)4),COleVariant(_T("MCC")));
    	range.put_Item(COleVariant((long)1),COleVariant((long)5),COleVariant(_T("MNC")));
    	range.put_Item(COleVariant((long)1),COleVariant((long)6),COleVariant(_T("GroupAddr")));
    	range.put_Item(COleVariant((long)1),COleVariant((long)7),COleVariant(_T("Cou")));
    	range.put_Item(COleVariant((long)1),COleVariant((long)8),COleVariant(_T("DMO Freq")));
    
    	for (int i =0; i < 1000; i++ )
    	{
    		if (m_excel_list.GetItemText(i,1).IsEmpty())
    		{
    			break;
    		}
    		CString mm = m_excel_list.GetItemText(i,1);
     					//加载所有单元格;
     		range.put_Item(COleVariant((long)i+2),COleVariant((long)1),COleVariant(mm));
     		range.put_Item(COleVariant((long)i+2),COleVariant((long)2),COleVariant(m_excel_list.GetItemText(i,2)));
     		range.put_Item(COleVariant((long)i+2),COleVariant((long)3),COleVariant(m_excel_list.GetItemText(i,3)));
     		range.put_Item(COleVariant((long)i+2),COleVariant((long)4),COleVariant(m_excel_list.GetItemText(i,4)));
     		range.put_Item(COleVariant((long)i+2),COleVariant((long)5),COleVariant(m_excel_list.GetItemText(i,5)));
     		range.put_Item(COleVariant((long)i+2),COleVariant((long)6),COleVariant(m_excel_list.GetItemText(i,6)));
     		range.put_Item(COleVariant((long)i+2),COleVariant((long)7),COleVariant(m_excel_list.GetItemText(i,7)));
     		range.put_Item(COleVariant((long)i+2),COleVariant((long)8),COleVariant(m_excel_list.GetItemText(i,8)));
    	}
    
    	range.AttachDispatch(sheet.get_UsedRange());//加载已使用的单元格
    	range.put_WrapText(COleVariant((long)1));   //设置文本自动换行
    
    	//5.设置对齐方式
    	//水平对齐:默认 1 居中 -4108, 左= -4131,右=-4152
    	//垂直对齐:默认 2 居中 -4108, 左= -4160,右=-4107
    	range.put_VerticalAlignment(COleVariant((long)-4108));
    	range.put_HorizontalAlignment(COleVariant((long)-4108));
    
     	Book.SaveCopyAs(COleVariant(strExcelFile)); //保存
    
    	Book.put_Saved(TRUE);
    	//8.释放资源
    	range.ReleaseDispatch();
    	sheet.ReleaseDispatch();
    	sheets.ReleaseDispatch();
    	Book.ReleaseDispatch();
    	Books.ReleaseDispatch();
    	App.ReleaseDispatch();
    }
    
    

    获取数据到vector

    //获取Excel表格数据,传入地址
    void ExcelRW::getExcelData(CString strPath)
    {
    
    	CApplication app;
    	CWorkbooks books;
    	CWorkbook book;
    	CWorksheets sheets;
    	CWorksheet sheet;
    	CRange range;
    
    	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);  
    	if (!app.CreateDispatch(_T("Excel.Application")))  
    	{  
    		MessageBox(_T("Error!Creat Excel Application Server Fail!"));  
    		exit(1);  
    	}  
    
    	books.AttachDispatch(app.get_Workbooks(),true); 
    	book.AttachDispatch(books.Add(_variant_t(strPath)));//获取选择的Excel文件
    	sheets.AttachDispatch(book.get_Worksheets(),true);//获取文件中的所有sheet
    	sheet.AttachDispatch(sheets.get_Item(_variant_t("sheet1")),true);//获取sheet1区域
    
    	vstrType.clear();
    	vstrID.clear();
    	vstrAlias.clear();
    	vstrMCC.clear();
    	vstrMNC.clear();
    	vstrGroup.clear();
    	vstrCou.clear();
    	vstrDMOFreq.clear();
    
    	CString str;
    	bool bExit = false;
    	for(int irow=2;!bExit;irow++)
    	{
    		for(int icolumn=1;icolumn<9;icolumn++)
    		{
    			range.AttachDispatch(sheet.get_Cells(),true);//获取sheet1所有的单元格,重置当前区域为A1
    			range.AttachDispatch(range.get_Item (COleVariant((long)irow),COleVariant((long)icolumn)).pdispVal);//获取单元格
    			switch(icolumn)
    			{
    			case 1: str = range.get_Value2(); 
    				if(str.IsEmpty())
    				{
    					bExit = true; 
    					break;
    				}
    				vstrType.push_back(str); 
    				break;
    			case 2: str = range.get_Value2();
    				vstrID.push_back(str);
    				break;
    			case 3: str = range.get_Value2();
    				str.Replace(" ", "");
    				vstrAlias.push_back(str);
    				break;
    			case 4: str = range.get_Value2();
    				str.Replace(" ", "");
    				vstrMCC.push_back(str);
    				break;
    			case 5: str = range.get_Value2();
    				vstrMNC.push_back(str);
    				break;
    			case 6: str = range.get_Value2();
    				vstrGroup.push_back(str);
    				break;
    			case 7: str = range.get_Value2();
    				vstrCou.push_back(str);
    				break;
    			case 8:
    				str = range.get_Value2();
    				vstrDMOFreq.push_back(str);
    			default: ;
    			}
    			if(bExit)
    			{
    				break;
    			}
    		}
    	}
    
    	range.ReleaseDispatch();//释放对象
    	sheet.ReleaseDispatch();
    	sheets.ReleaseDispatch();
    	book.ReleaseDispatch();  
    	books.ReleaseDispatch();    
    	app.ReleaseDispatch(); 
    	app.Quit();//退出Excel程序
    
    	if(!vstrType.empty())
    	{
    		//(_T("读取数据成功"));
    	} else
    	{
    		//(_T("读取数据失败"));
    	}
    
    }
    

     简单的两个按钮和一个表格

    展开全文
  • C++ MFC 封装

    2021-07-17 18:31:51
    } 2、输入的附加依赖项那里添加库名字 3、把dll和lib添加到exe运行文件那里 MFC 带界面的封装 新建工程 MFC-》动态链接库,其他的设置一般不需要改,点击完成 模态对话框的显示 工程建立好了以后,资源视图添加...

    封装

    1、使用VS新建一个空项目(有的说也可以新建一个专门的dl
    文件什么的)

    2、新建一个.h文件

    #pragma once
    #define _CRT_SECURE_NO_WARNINGS  //为了避免的一个错误警告(出现错误提示再加)
    #define FENGZHUANG_API __declspec(dllexport)
    宏定义  FENGZHUANG_API  等价于后面那个
    
    //把这个类TEST_1  导出,方便外部函数调用
    class FENGZHUANG_API  TEST_1
    {
    public:
    
    	static TEST_1* createInterface(); //定义了一个静态接口函数
    
    	virtual void init() = 0;
    	virtual void Destroy() = 0;
    	virtual char* Getname() = 0;
    };
    

    3、.cpp文件,实现上面那个.h文件的定义

    #include "fengzhuang.h"
    #include <iostream>
    //又定义了一个类,继承头文件里面的那个接口类,那个接口类是抽象类
    class CHello : public TEST_1
    {
    public:
    	CHello();
    
    	virtual void init();  //重写基类的函数
    	virtual void Destroy();
    	virtual char* Getname();
    
    
    private:
    	char name[256];
    };
    
    CHello::CHello()
    {
    	memset(name, 0, sizeof(name));
    	strcpy(name, "测试");
    
    }
    void CHello::init()
    {
    	printf("%s\n", "初始化");
    }
    void CHello::Destroy()
    {
    	memset(name, 0, sizeof(name));
    }
    
    char* CHello::Getname()
    {
    	return name;
    }
    
    
    //头文件里面的那个静态函数
    //功能:返回CHello这个类的一个对象的指针,当用户调用这个函数的时候就可以操作函数
    TEST_1* TEST_1::createInterface()
    {
    	return new CHello();
    }
    

    4、函数写完以后,生成lib文件的话要把配置类型的那个
    .exe 改成lib 和dll,生成两次,
    在这里插入图片描述
    出现这样就OK了
    在这里插入图片描述
    生成的lib和dll文件在debug目录下面(就是exe文件那个地方)

    5、整合成下面的方式
    在这里插入图片描述

    6、如果改动了封装里面函数的内容,记得要重新生成lib文件和dll文件

    调用封装

    1、建立新项目,引用封装的那个.h文件(添加现有项放到对应的项目里面去),然后在需要引用该库的地方添加对应的头文件,如果不放在和.cpp文件处在同一级目录下,就要添加附加包含目录和添加库目录

    记得把改成64位的模式,不管是封装还是调用封装都需要保持一致,64位或32位,debug或release

    #include "fengzhuang.h"
    #include <iostream>
    
    这个是放在封装的.h文件里面的
    //#ifdef TEST
    //#define FENGZHUANG_API __declspec(dllexport)
    //#else
    //#define FENGZHUANG_API __declspec(dllimport)
    //#endif
    
    这个和链接器-》输入-》附加依赖项那个添加lib名字相同的效果
    //#pragma comment(lib,"Test_fengzhuang.lib")
    
    
    int main()
    {
    	TEST_1* test = TEST_1::createInterface();
    	std::cout << test->Getname() << std::endl;
    	return 0;
    }
    

    2、输入的附加依赖项那里添加库名字
    在这里插入图片描述
    3、把dll和lib添加到exe运行文件那里

    MFC 带界面的封装

    新建工程 MFC-》动态链接库,其他的设置一般不需要改,点击完成
    在这里插入图片描述

    模态对话框的显示

    工程建立好了以后,资源视图添加对话框,为对话框添加类,其他的可按照前面封装教程里面得来,不过显示对话框的时候要注意下面的代码

    注意:生成lib库和dll库的时候,最好先生成lib库再生成dll库

    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    一定要加,否则对话框就显示不了

    void CTestDlg::createInterface1()
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
    	CTestDlg *ph = new CTestDlg;
    	ph->DoModal();  //new出来的指针要记得释放
    	delete ph;
    }
    
    void CTestDlg::createInterface2()  //ok
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
    	CTestDlg ph;
    	ph.DoModal();
    	
    }
    

    非模态对话框的显示

    void CTestDlg::createInterface10()  //ok
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
    	CTestDlg* ph = new CTestDlg;
    	ph->Create(IDD_DIALOG1);
    	ph->ShowWindow(SW_SHOWNORMAL);
    	//delete ph; //不能delete,会看不到对话框的弹出
    }
    

    //也会失败

    void CTestDlg::createInterface12()  //NO
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
    	CTestDlg ph3;
    	ph3.Create(IDD_DIALOG1);
    	ph3.ShowWindow(SW_SHOWNORMAL);
    }
    

    上面的只适用于那种弹出式对话框,如果要封装为child的形式,请看下面的代码

    记得把封装里面的style改为child,对话框类型改为NONE

    来源:
    https://bbs.csdn.net/topics/390948839

    static CTestDlg*  InitData(CWnd * pWnd);
    
    CTestDlg *  CTestDlg::InitData(CWnd * pWnd/*父窗口指针,由调用者传入,一般是主对话框*/)
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
    	CTestDlg * pDlg = new CTestDlg;
    	if (pDlg->Create(IDD_DIALOG1, CWnd::FromHandle(pWnd->GetSafeHwnd())))
    	{
    		pDlg->SetParent(pWnd);
    		pDlg->ShowWindow(SW_SHOW);
    
    		return pDlg;
    	}
    	return NULL;
    }
    

    调用封装
    和上面C++一样,加头文件,加lib名字在链接器的输入里面,在运行目录下加dll和lib库

    CC假设是主界面
    在这里插入图片描述

    CComplex cc;
    
    cc.DoModal();
    

    在主界面的类函数里面
    OnInitDialog或者OnShowWIndow
    添加相应的处理代码

    void CComplex::OnShowWindow(BOOL bShow, UINT nStatus)
    {
    	CDialogEx::OnShowWindow(bShow, nStatus);
    	// TODO: 在此处添加消息处理程序代码
    	if (bShow)
    	{
    		RECT myRect;
    		GetDlgItem(IDC_STATIC)->GetClientRect(&myRect);
    		//dlg2.MoveWindow(&myRect);
    		CTestDlg* test = CTestDlg::InitData(this);
    		//CTestDlg* test = CTestDlg::createInterface7();
    		test->MoveWindow(&myRect);
    		//test->CenterWindow();
    	}
    }
    

    运行结果如下:
    在这里插入图片描述

    展开全文
  • c++ mfc发送消息

    2021-01-14 10:08:45
    1 添加下面的定义 HCURSOR m_hCursor; RECT m_rtCtrl; BOOL m_bCapturing; HWND m_hwndDest;...2 OnInitialDialog()增加下面代码 ...m_hCursor = LoadCursor(NULL,IDC_SIZEALL);...void CDemoDlg::OnLButton.

    1  添加下面的定义

    HCURSOR m_hCursor;
    	RECT m_rtCtrl;
    	BOOL m_bCapturing;
    	HWND m_hwndDest;

    2 OnInitialDialog()增加下面代码

    m_hCursor = LoadCursor(NULL,IDC_SIZEALL);
    	GetDlgItem(IDC_CAP)->GetWindowRect(&m_rtCtrl);

    3 添加下面的消息处理,事件处理

    void CDemoDlg::OnLButtonDown(UINT nFlags, CPoint point)
    {
    	// TODO: 在此添加消息处理程序代码和/或调用默认值
    	if(point.x >= m_rtCtrl.left && point.x <= m_rtCtrl.right
    		|| point.y >= m_rtCtrl.top && point.y <= m_rtCtrl.bottom)
    	{
    		m_bCapturing = TRUE;
    		SetCapture();
    		SetCursor(m_hCursor);
    	}
    
    	CDialogEx::OnLButtonDown(nFlags, point);
    }
    
    
    void CDemoDlg::OnLButtonUp(UINT nFlags, CPoint point)
    {
    	// TODO: 在此添加消息处理程序代码和/或调用默认值
    	if(m_bCapturing)
    	{
    		ReleaseCapture();
    		m_bCapturing = FALSE;
    		POINT pt = point;
    		ClientToScreen(&pt);
    		m_hwndDest = ::WindowFromPoint(pt);
    		TCHAR szBuf[MAX_PATH] = {0};
    		_stprintf(szBuf,_T("0x%.8X"),m_hwndDest);
    		SetDlgItemText(IDC_EDT_HWND, szBuf);
    		GetClassName(m_hwndDest,szBuf,MAX_PATH);
    		SetDlgItemText(IDC_EDT_CLASS,szBuf);
    		::SendMessage(m_hwndDest,WM_GETTEXT, MAX_PATH,(LPARAM)szBuf);
    		SetDlgItemText(IDC_EDT_TEXT,szBuf);
    	}
    	CDialogEx::OnLButtonUp(nFlags, point);
    }
    
    
    void CDemoDlg::OnBnClickedBtnSettext()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	CString str;
    	GetDlgItemText(IDC_EDT_TEXT,str);
    	::SendMessage(m_hwndDest,WM_SETTEXT,0,(LPARAM)(LPCTSTR)str);
    }
    
    
    void CDemoDlg::OnBnClickedBtnClose()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	::SendMessage(m_hwndDest,WM_CLOSE,0,0);
    }
    

     

    展开全文
  • c++ mfc tcp client

    2021-03-03 21:39:18
    1 新建对话框工程ClientDemo 2 新建类CClientSocket,让其继承与CSocket #pragma once #include <afxsock.h> #include "CChatDlg.h" class CClientSocket : ... void SetWnd(CChatDlg* pDlg)

    1 新建对话框工程ClientDemo

    2 新建类CClientSocket,让其继承与CSocket

    #pragma once
    #include <afxsock.h>
    #include "CChatDlg.h"
    class CClientSocket :
        public CSocket
    {
    public:
        ~CClientSocket();
    public:
        CChatDlg* m_pChatDlg;
    
        void SetWnd(CChatDlg* pDlg);
    
        virtual void OnReceive(int nErrorCode);
    };
    
    
    #include "pch.h"
    #include "CClientSocket.h"
    
    CClientSocket::~CClientSocket()
    {
    	delete m_pChatDlg;
    }
    
    void CClientSocket::SetWnd(CChatDlg* pDlg)
    {
    	m_pChatDlg = pDlg;
    }
    
    
    void CClientSocket::OnReceive(int nErrorCode)
    {
    	// TODO: 在此添加专用代码和/或调用基类
    	if (m_pChatDlg)
    	{
    		char bufferData[2048];
    		CString str;
    		int len = Receive(bufferData, 2048);
    		if (len!=-1)
    		{
    			bufferData[len] = '\0';
    			bufferData[len + 1] = '\0';
    			str.Format(_T("%s"), bufferData);
    			m_pChatDlg->m_list.AddString(str);
    		}
    	}
    
    	CSocket::OnReceive(nErrorCode);
    }
    

     

    3 添加对话框资源,添加对应的类CChatDlg

    CListBox m_list;
    	CString m_sSend;
    ;
    void CChatDlg::OnBnClickedButton1()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	CString sInfo;
    	int len;
    	UpdateData();
    	if (m_sSend.IsEmpty())
    	{
    		AfxMessageBox(_T("发送内容不能为空"));
    		
    	}
    	else
    	{
    		sInfo.Format(_T("%s说:%s"), theApp.m_Name, m_sSend);
    		len = theApp.m_clientSock.Send(sInfo.GetBuffer(sInfo.GetLength()), 2 * sInfo.GetLength());
    		if (SOCKET_ERROR==len)
    		{
    			AfxMessageBox(_T("发送错误"));
    
    		}
    	}
    }

     4 在CClientDemoApp添加成员变量

    CString m_Name;
    	CClientSocket m_clientSock;

    5.实现连接服务器CClientDemoDlg::OnBnClickedButton1()

    void CClientDemoDlg::OnBnClickedButton1()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	CString sIP, sPort;
    	UINT port;
    	UpdateData();
    	if (m_ip.IsBlank()||m_nServerPort<1024||m_nickName.IsEmpty())
    	{
    		AfxMessageBox(_T("请设置服务器信息"));
    		return;
    	}
    	BYTE nf1, nf2, nf3, nf4;
    	m_ip.GetAddress(nf1, nf2, nf3, nf4);
    	sIP.Format(_T("%d.%d.%d.%d"), nf1, nf2, nf3, nf4);
    	theApp.m_Name = m_nickName;
    	if (theApp.m_clientSock.Connect(sIP,m_nServerPort))
    	{
    		AfxMessageBox(_T("连接服务器成功"));
    		CChatDlg dlg;
    		theApp.m_clientSock.SetWnd(&dlg);
    		dlg.DoModal();
    	}
    	else
    	{
    		AfxMessageBox(_T("连接服务器失败"));
    	}
    }
    

     

    5 实现客户端发送消息CChatDlg::OnBnClickedButton1()

    void CChatDlg::OnBnClickedButton1()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	CString sInfo;
    	int len;
    	UpdateData();
    	if (m_sSend.IsEmpty())
    	{
    		AfxMessageBox(_T("发送内容不能为空"));
    		
    	}
    	else
    	{
    		sInfo.Format(_T("%s说:%s"), theApp.m_Name, m_sSend);
    		len = theApp.m_clientSock.Send(sInfo.GetBuffer(sInfo.GetLength()), 2 * sInfo.GetLength());
    		if (SOCKET_ERROR==len)
    		{
    			AfxMessageBox(_T("发送错误"));
    
    		}
    	}
    }

     

    展开全文
  • 1:创建项目: 完成后 如果找不到窗口界面,双击 双击 就出现了 ! 添加新窗体 双击确认按钮 选择这个 填写类名字 回到第一个窗体 添加按钮: 双击按钮进入事件: ......
  • Edit Control是在MFC对话框中最频繁的使用的控件之一,获取Edit Control与赋值是常见的操作。下面来看看如何实现。IDE Visual Studio 2010,MFC工程。 首先是新建MFC工程。 然后在资源视图界面中,Dialog文件夹...
  • 原因应该是MFC关闭dialog的时候有些窗口指针没有释放,但是就是找不到解决方案。 以下是部分代码: 原创不易,代码资源地址:https://download.csdn.net/download/QQ438152470/20022488 代码有问题或者想要修改功能...
  • (1)设置对话框的vertical scrollbar属性为true;  (2)初始化滚动条,如下:  SCROLLINFO scrollinfo; GetScrollInfo(SB_VERT, &scrollinfo, SIF_ALL);... scrollinfo.nPage = 10;...scrollinfo,
  • 效果图如下: 、 关于视频操作的封装 使用了VLC库,分享至此 头文件 #pragma once #include"pch.h" #include "vlc.h" #pragma comment(lib,"libvlccore.lib") #pragma comment(lib,"libvlc.... m_pVlcI..
  • 新建一个MFC工程,添加两个picture控件和一个按钮控件。
  • C++MFC打开、显示、读取图片,简单算法,灰度显示 一、VS2010 新建项目——MFC——MFC应用程序——选择基于对话框——点击完成 List item
  • MFC程序中,使用CString来处理字符串是一个很不错的选择。CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串。CString的Format方法给我们进行字符串的转换带来了很大的方便,比如常见的int、...
  • MFC制作的工程由很多文件构成,它不能象一般C++程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊方法才行。实际上有多种方法可以实现,这里只介绍两种方法。...
  • c++ mfc BitBlt 绘图

    2021-04-20 11:31:36
    就用FindResource来说明.(这个函数与MFC的AfxFindResourceHandle) HRSRC FindResource( HMODULE hModule, // module handle LPCTSTR lpName, // resource name LPCTSTR lpType // resource type ); 就是lpName参数...
  • https://www.cnblogs.com/GothicLolita/p/13551162.html 进入 含CDialog类的文件, 打开 项目,类向导 ...添加相应的虚函数(更新:在此窗口直接选择CAboutDlg类也可 2020-08-23 22:38:42) ......
  • C++ MFC GroupEx自定义控件:CStatic/Group 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 目录 C++ ...
  • 开始创建的时候随便起了一个名字,后来想改名字,或者在旧工程上做一个新的工程,都会用到重命名。 在VS2019下的方法,亲测有效。1.【解决方案】右键选择【重命名】,将OldSlnName重命名为NewSlnName ...
  • c++ mfc

    2021-02-08 14:16:30
    例如你的可执行文件名为 MFCApplication.exe,则你的Command Line就为: editbin /SUBSYSTEM:CONSOLE $(OUTDIR)\MFCApplication.e 5.光标定位到CEdit最后 CString strInfo; m_Edit.GetWindowText(strInfo); int ...
  • C++ MFC实现图书管理系统(VS2019)

    千次阅读 2021-06-26 12:03:54
    点击查看:C++ MFC实现图书管理系统(VS2019) 文件大小:19M 操作系统:Windows10旗舰版 开发工具:VS2019 开发语言:.cpp 简要概述: 图书馆需要对大量的图书信息进行处理 利用C++文件存储的应用来实现对图书,作者...
  • //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_ON_MESSAGE_TESTDLG_H__B8379676_2F5B_48DD_9E95_41A4CD...
  • 提示需要安装mfc 若要解决此问题,请使用以下选择启动VisualStudio 安装程序:用于x86和x64的VisualC++MFC。 打开VS2017安装器,默认是MFC没勾...要安装上面的ODBC,得先安装Microsoft Visual C++ Redistributable...
  • 1 新建mfc单文档项目MenuTest 2 在Resource.h里面添加如下定义 #define ID_MENU_1 10000 #define ID_MENU_2 10001 #define ID_MENU_3 10002 #define ID_MENU_4 10003 #define ID_MENU_5 10004
  • c++ mfc的第一天

    热门讨论 2021-05-26 23:17:14
    //Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As String) As Long 网上一搜c++如何获取句柄全是这个,不过貌似不是c++用的,我也不知道该用在...
  • 一、新建一个MFC工程并添加相应的控件。注意事项: 二、再添加相应的变量 三、写入打开图片的代码(需要在.cpp文件中添加 #include “vector”) CFileDialog fileDlg(TRUE, _T("png"), NULL, 0, _T("image Files(*...
  • 根据提示点击install进行安装组件 开始安装C++ MFC for latest v142 build tools (x86 & 64) 正在下载所需组件 安装完成 成功 打开项目 升级到最新
  • c++ mfc定时器

    2021-01-14 10:32:49
    1 头文件定义 UINT m_nRedID; UINT m_nGreenID; 2 事件实现 void CDemoDlg::OnBnClickedButtonRed() { // TODO: 在此添加控件通知处理程序代码 if(m_nRedID == 0) ... ::ShowWindow(::GetDlgIte..
  • c++ mfc的第二天

    2021-05-27 10:31:53
    获取客户区窗口坐标: LPPOINT point; //坐标,传给ClientToScreen用的 POINT ptemp; //用它来初始化point point = &ptemp; ptemp.x = 0; ptemp.y = 0;...ClientToScreen(hWnd, point);//获取客户区相对于屏幕的坐标...
  • 本文主要记录,如何调用第三方动态库DLL,不通过隐式调用,没有.h文件和.lib文件;但已知函数的接口定义,DLL中方法的名称以及参数类型,接下来讲解的是如何让其中的方法为我们所用,以下是详细步骤: ...
  • 1.在vs中建立mfc工程,建立单文档程序,生成类选择*view,基类选择CFormView。 2.打开资源视图->对话框资源,添加mapobject地图控件: 3.在控件上右键,选择属性,点击属性页: 4.点击add,添加要显示的地图: ...
  • c++ mfc自定义消息

    2021-01-14 10:25:23
    1 在cpp里面添加下面定义 #ifdef _DEBUG #define new DEBUG_NEW #endif #define WM_MY_DEFINED_MSG (WM_USER + 101) #define MY_REGISTERED_MSG_STR _T("MY_MSG_STRING") ...UINT WM_MY_REGISTERED_MSG;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 136,422
精华内容 54,568
关键字:

c++mfc

c++ 订阅
友情链接: 6.zip