VS下如何建立一个新的MFC程序 网络编程 课设 基于C++ MFC 连接数据库 小应用 小项目浅析展示
原文作者:aircraft
原文地址:https://www.cnblogs.com/DOMLX/p/8191036.html
这里不知道会不会有人是真的新手 新新手 不知道怎么 如何建立一个MFC 工程 应该不会吧? 就是 打开VS 新建项目-MFC -MFC工程-点基于对话框 -和在静态库中使用 然后下一页将关于对话框取消了 不然会有两个对话框出来 然后点击完成
具体如下
步骤1:双击打开vs2013,进入起始页,按Ctrl+Shift+N组合快捷键(此时也可以一步步新建->项目操作),可以新建工程,选择模块下的Visual C++-->MFC-->MFC应用程序,设定好项目文件名和路径,点击确定。
步骤2:进入应用程序类型界面。勾选“基于对话框”,在“MFC的使用”中,勾选“在静态库中使用MFC(U)”,再点击下一步。
注:MFC可以在静态库下使用,或者在共享DLL中使用,但前者会把所有用到的dll文件集成到exe文件,因此占用内存较大,所以自己选择。
这里选择去掉关于对话框,不然有两个对话框
步骤3:进入用户界面功能。选择主框架样式,可以自由选择是否添加最小化框、最大化框;“关于”框也可以去掉;对话框标题一般不需要更改,默认与项目名称一致。
以上步骤结束之后我们就看到一个对话框 有确定和取消 可以双击确定进去函数 然后在CDialogEx::OnOK();下面输入 AfxMessageBox("hello word"); 然后编译运行 就能出来对话框 点击确定按钮 hello word 就出来啦
上面这些完成就代表项目建立完成,然后还实现了每个初学者的hello word 哈哈哈哈哈哈 以上就是新手建立MFC教程 下面简单介绍点知识就进入主题
这里讲一下里面几行重要的新手代码:这些都是在2.cpp里的InitInstance()函数的 看图片左边 带Dlg是对话框cpp文件 一般也是对话框的函数名字
然后对话框的资源是放在资源视图里的 VS里面如果左边下面没有资源视图就要 在 主页面的 上面的资源视图里面 或者里面的其他窗口 找到 然后打开
CMFCApplication2Dlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
上面这三行代码 1.是用自己的对话框函数 定义一个对象
2.因为这里是第一个对话框是主对话框 所以绑定主对话框 m_pMainWnd = &dlg; 其他对话框就只要1 3 两行就能进行弹出对话框
3 。dlg.DoModal();这里就是用对话框对象发出弹出对话框指令。
有这些代码直接编译运行就能跳出对话框
注意啦 命名 都用英文 源码在这https://pan.baidu.com/s/1chRMPK
工具:vs2013,mysql5.7.6
操作系统:win64位 注意啦 我这里是VS2013 你们要是拷贝我的工程在其他版本上可能不能用 这时候只要点击项目 - 属性-配置属性 -右边的工具集 改成你们自己的版本 就行了
还有 我这里是 64位的 你们有可能项目是 WIN 32 的 要改 项目 -属性-右上的 配置管理器-里面的平台改成X64 不然就会出现一些 什么什么变量 在什么地方引用 之类的错误
设置一些引用文件的环境变量,基本跟opencv配置过程差不多 如果配置过OpenCV的就知道了
点击项目->属性---改成所有配置--配置->vc++目录
然后“include目录”(包含目录)那把“C:\ProgramFiles\MySQL 5.7.6\include”给加进来
再然后“lib目录”(库目录)那里把“C:\ProgramFiles\MySQL 5.7.6\lib”和“C:\ProgramFiles\MySQL 5.7.6\lib\debug”也一起加进来。以上三个文件在mysql
的安装目录下(!!!注意啦 这是我MYSQL的安装目录 你们看自己的)
最后在加一个 项目-属性-连接器-常规 -附加依赖项 里 加 libmysql.lib 然后在把这个MYSQL的文件 拷贝到自己MFC工程的DEBUG 或者代码放置的地方 //这里如果不加的话 就要在工程里面加上
#pragma comment (lib, "libmysql.lib") 同样还是要把文件拷贝到工程里面去
#pragma comment (lib, "mysqlclient.lib")
还有可能会因为没有加这个而报错 这个是MFC 经常的错误 #define _CRT_SECURE_NO_DEPRECATE 这个要加在stafx.h里最上面 也就是 所有头文件还没有加载的时候就要加上去
好了 下面开始进入正题:
第一步: 除了代码给我们的 头文件 我们必要的头文件也是有要加的:
- #include <stdio.h>
- #include <string.h>
- #include <algorithm>
- #include <iostream>
- #include "winsock.h"
- #include "mysql.h"
- #include “Resource.h”
mysql.h 不能打开 就是 没有配置好 检查一下 再不行就 拷贝一份到工程里面。
第二步:
先上代码: 这里点击我对话框BUTTON 跳转出来的函数
void CMYSQLLLINKDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码 MYSQL m_sqlCon;
mysql_init(&m_sqlCon);
// localhost:服务器 root/123456为账号密码 testa为数据库名 3306为端口
if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "123456", "testa", 3306, NULL, 0))
{
AfxMessageBox(_T("访问数据库失败!"));
CString e = mysql_error(&m_sqlCon);//需要将项目属性中字符集修改为“使用多字节字符集”或“未设置”
MessageBox(e);
return;
}
else
{
AfxMessageBox(_T("成功!"));
mysql_query(&m_sqlCon, "SET NAMES 'GB2312'");//解决从数据库中读取数据后汉字乱码显示的问题 也可以是UTF-8 CString name, id, student_name, student_id, student_major;
//LPSTR sql = (LPSTR)malloc(200); 两种格式都可以 我喜欢用sql.Format这种
CString sql;
GetDlgItemText(IDC_EDIT1, name);
GetDlgItemText(IDC_EDIT2, id);
sql.Format(TEXT("select student_name,student_id,student_majo from users where father_id='%s'and father_name='%s';"), id, name);
//sprintf(sql, "select student_name,student_id,student_majo from users where father_id='%s'and father_name='%s';", id1, name1);
AfxMessageBox(sql);//看看SQL语句
mysql_query(&m_sqlCon, sql); MYSQL_RES *res;//定义获取结果集
MYSQL_ROW row;//获取结果集中行数据 res = mysql_store_result(&m_sqlCon);//取得查询结果,保存查询到的数据到res
int num = 0;
//这个函数每次只能获取一行数据 不过每次获取完res指针会后移 所以while循环就可以不断的获取下面的数据 不过要注意存储问题
if (row = mysql_fetch_row(res))
{
CString num1 = row[0], num2 = row[1], num3 = row[2];
student_name = num1;
student_id = num2;
student_major = num3;
SetDlgItemText(IDC_EDIT3, student_name);
SetDlgItemText(IDC_EDIT4, student_id);
SetDlgItemText(IDC_EDIT5, student_major);
}
else
{
CString retu(_T("输入信息有误!"));
SetDlgItemText(IDC_EDIT3, retu);
}
}
}
好吧 一下上代码 可能有点乱 或者难以理解 那我们一个一个来看:
MYSQL m_sqlCon;
mysql_init(&m_sqlCon);
这个就是 建立一个MYSQL的实例对象 然后对他进行初始化 还有其他写法:
MYSQL *sock;
sock=mysql_init(0);
都是差不多的意思。
下面就是连接数据库和判断: // localhost:服务器 root/123456为账号密码 testa为数据库名 3306为端口 &m_sqlCon这个就不用说了吧
!!!注意了整个项目 我用的都是 多字节 需要在自己项目属性那里更改 没有多字节库 的可以 去网上下载一个 安装到VS里
if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "123456", "testa", 3306, NULL, 0))
{
AfxMessageBox(_T("访问数据库失败!"));
CString e = mysql_error(&m_sqlCon);//需要将项目属性中字符集修改为“使用多字节字符集”或“未设置”
MessageBox(e);
return;
}
else
{
AfxMessageBox(_T("成功!"));
mysql_query(&m_sqlCon, "SET NAMES 'GB2312'");//解决从数据库中读取数据后汉字乱码显示的问题 也可以是UTF-8
}
好了 上面这些就是 连接数据库的 简单步骤了 。接下来我们来一个小项目玩玩。。。。。
第三步 :
上面这个就是一个简单的实现 从 MFC 到数据库的 查询学生信息的小界面。
下面 就是我数据库表格 users 放在 一个testa 的数据库里面 如果数据库安装不会的可以参照我的另外一篇安装数据库的博客http://www.cnblogs.com/DOMLX/p/8094659.html
看代码解释:
CString name, id, student_name, student_id, student_major;
//LPSTR sql = (LPSTR)malloc(200); 两种格式都可以 我喜欢用sql.Format这种
CString sql;
GetDlgItemText(IDC_EDIT1, name);
GetDlgItemText(IDC_EDIT2, id);
sql.Format(TEXT("select student_name,student_id,student_majo from users where father_id='%s'and father_name='%s';"), id, name);
//sprintf(sql, "select student_name,student_id,student_majo from users where father_id='%s'and father_name='%s';", id1, name1);
AfxMessageBox(sql);//看看SQL语句
mysql_query(&m_sqlCon, sql); MYSQL_RES *res;//定义获取结果集
MYSQL_ROW row;//获取结果集中行数据 res = mysql_store_result(&m_sqlCon);//取得查询结果,保存查询到的数据到res
int num = 0;
//这个函数每次只能获取一行数据返回的是个行数组 不过每次获取完res指针会后移 所以while循环就可以不断的获取下面的数据 不过要注意存储问题
if (row = mysql_fetch_row(res))
{
CString num1 = row[0], num2 = row[1], num3 = row[2];//将数组中的数据存储
student_name = num1;
student_id = num2;
student_major = num3;
SetDlgItemText(IDC_EDIT3, student_name);//将数据都显示到对话框中的控件中去
SetDlgItemText(IDC_EDIT4, student_id);
SetDlgItemText(IDC_EDIT5, student_major);
}
else
{
CString retu(_T("输入信息有误!"));
SetDlgItemText(IDC_EDIT3, retu);
}
完成上面这些 加上你的数据库已经打开 并且 创建好了 表 和存入了数据 就可以开始进行查询了。
大家好我是飞机,是一个想成为全栈工程师的男人。
若有兴趣交流分享技术,可关注本人公众号,里面会不定期的分享各种编程教程,和共享源码,诸如研究分享关于c/c++,python,前端,后端,opencv,halcon,opengl,机器学习深度学习之类有关于基础编程,图像处理和机器视觉开发的知识
VS下如何建立一个新的MFC程序 网络编程 课设 基于C++ MFC 连接数据库 小应用 小项目浅析展示的更多相关文章
- Window7 系统下重新建立一个新分区
为了方便使用,准备在原来分区上再分割出一个分区,步骤如下 首先右击计算机,选择管理打开计算机管理窗口,选择磁盘管理,当前窗口右侧会出现当前计算机所有已存在的分区列表. 选择要进行分区的磁盘,右击选择压 ...
- time模块目录下自己建立一个名为log的文件夹
使用python调用ping命令,然后在日志中记录ping的结果,用来监测网络连通情况. 代码: [python]from time import *from subprocess import *w ...
- msql_createdb: 建立一个新的 mSQL 数据库。
mcrypt_ecb: 使用 ECB 将资料加/解密. mcrypt_get_block_size: 取得编码方式的区块大小. mcrypt_get_cipher_name: 取得编码方式的名称. m ...
- vue+nodejs+express+mysql 建立一个在线网盘程序
vue+nodejs+express+mysql 建立一个在线网盘程序 目录 vue+nodejs+express+mysql 建立一个在线网盘程序 第一章 开发环境准备 1.1 开发所用工具简介 1 ...
- 在linux下,查看一个运行中的程序, 占用了多少内存
1. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有 (1). ps aux: 其中 VSZ(或VSS)列 表示,程序占用了多少虚拟内存. RSS列 表示, 程序占用了多少物 ...
- 如何在Apache中建立一个新端口
环境: Windows server 2008 R2, Apache, PHP5 步骤: 建立一个目录,里面放置一个index.php. 打开Apache\conf\httpd.conf 文件,做如下 ...
- MFC学习-第4课 消息机制和MFC作图
转自: 1.http://blog.sina.com.cn/s/blog_6b5180bf01012kbz.html 2.http://blog.csdn.net/happyhhb/article/d ...
- ESP8266开发课堂之 - 建立一个新项目
项目架构 ESP8266项目开发并非使用IDE自动管理工程文件,而是使用了诸多第三方程序如Python,以及使用了Makefile管理依赖与控制编译,所以项目的创建与日常维护较为复杂,本篇将详述创建一 ...
- nodejs安装,配置环境,使用express建立一个新项目
1.下载nodejs安装包 去nodejs官网下载最新版本就行,网址:http://nodejs.cn/download/,点击自己适用的系统,自动下载跟电脑操作系统位数符合的安装包, 下载下来安装包 ...
随机推荐
- 桥梁(Bridge)模式
桥梁(Bridge)模式:桥梁模式是一个非常有用的模式,也是比较复杂的一个模式.熟悉这个模式对于理解面向对象的设计原则,包括"开-闭"原则(OCP)以及组合/聚合复用原则(CARP ...
- 小议C#接口的隐式与显示实现(续)
上文连接,讲的比较模糊,而且调用起来感觉比较混乱 http://www.cnblogs.com/walleyekneel/p/3581489.html 这次改为显式接口调用,可能项目也有这个一个需求 ...
- Vue watch用法
Vue.js 提供了一个方法 watch,它用于观察Vue实例上的数据变动.对应一个对象,键是观察表达式,值是对应回调.值也可以是方法名,或者是对象,包含选项. 例如,同一个组件切换时,不会触发生命周 ...
- Dos命令 WIN10 WIFI命令
设置WIFI命令: netsh wlan set hostednetwork ssid=T key=123456798 mode=allow netsh wlan start hostednetwor ...
- (转)使用vs调试的时候,如何知道程序阻塞在哪里?
遇到一个问题,加了两个断点当运行到断点A后,我释放掉了,理想状态应该是在断点B停住,但并没有,程序感觉就像是阻塞了一样请问,这种状况如何知道程序当前是在哪里阻塞着? 回复: 可以让调试器停住,然后在调 ...
- MVC进阶篇(一)——概览
前言 说到MVC,就得先说说框架是什么东西,MVC好多人都知道,是Model.view.controller,但是MVC到底是什么样的一个框架呢,好多人又说了是约定大于配置.下面我来说说我的理解. 内 ...
- 设置使用的python版本
一.查看当前使用的python版本,或设置使用的python版本 二.python2中默认使用ASCII码,无法识别中文,报错如图,解决办法,设置字符集为utf-8
- mysql设计-基本操作
mysql 设计 1)服务器管理 2)数据库管理 3)表管理 4)字段管理 5)索引管理 操作 1)sql语句 2)单表操作 3)多表操作 索引 记录 字段 mysam innodb ibdata1 ...
- PHP编码技巧
原则 正确实现功能 执行速度与快 占系统资源少 后期维护方便 编程注意 1.命名很重要 2.适当的使用注释 3.使用一个变量,需要初始化 4.优先使用单引号 $row['id']的效率是$row[id ...
- C语言实现数组及链表的快速排序
1. 数组快排: 方法一: #include <stdio.h> #include <stdlib.h> //交换 void swap(int *pi, int *pj) { ...