原文作者: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里最上面 也就是 所有头文件还没有加载的时候就要加上去

好了  下面开始进入正题:

  第一步:  除了代码给我们的 头文件  我们必要的头文件也是有要加的:

    1. #include <stdio.h>
    2. #include <string.h>
    3. #include <algorithm>
    4. #include <iostream>
    5. #include "winsock.h"
    6. #include "mysql.h"
    7. #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 连接数据库 小应用 小项目浅析展示的更多相关文章

  1. Window7 系统下重新建立一个新分区

    为了方便使用,准备在原来分区上再分割出一个分区,步骤如下 首先右击计算机,选择管理打开计算机管理窗口,选择磁盘管理,当前窗口右侧会出现当前计算机所有已存在的分区列表. 选择要进行分区的磁盘,右击选择压 ...

  2. time模块目录下自己建立一个名为log的文件夹

    使用python调用ping命令,然后在日志中记录ping的结果,用来监测网络连通情况. 代码: [python]from time import *from subprocess import *w ...

  3. msql_createdb: 建立一个新的 mSQL 数据库。

    mcrypt_ecb: 使用 ECB 将资料加/解密. mcrypt_get_block_size: 取得编码方式的区块大小. mcrypt_get_cipher_name: 取得编码方式的名称. m ...

  4. vue+nodejs+express+mysql 建立一个在线网盘程序

    vue+nodejs+express+mysql 建立一个在线网盘程序 目录 vue+nodejs+express+mysql 建立一个在线网盘程序 第一章 开发环境准备 1.1 开发所用工具简介 1 ...

  5. 在linux下,查看一个运行中的程序, 占用了多少内存

    1. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有 (1). ps aux: 其中  VSZ(或VSS)列 表示,程序占用了多少虚拟内存. RSS列 表示, 程序占用了多少物 ...

  6. 如何在Apache中建立一个新端口

    环境: Windows server 2008 R2, Apache, PHP5 步骤: 建立一个目录,里面放置一个index.php. 打开Apache\conf\httpd.conf 文件,做如下 ...

  7. MFC学习-第4课 消息机制和MFC作图

    转自: 1.http://blog.sina.com.cn/s/blog_6b5180bf01012kbz.html 2.http://blog.csdn.net/happyhhb/article/d ...

  8. ESP8266开发课堂之 - 建立一个新项目

    项目架构 ESP8266项目开发并非使用IDE自动管理工程文件,而是使用了诸多第三方程序如Python,以及使用了Makefile管理依赖与控制编译,所以项目的创建与日常维护较为复杂,本篇将详述创建一 ...

  9. nodejs安装,配置环境,使用express建立一个新项目

    1.下载nodejs安装包 去nodejs官网下载最新版本就行,网址:http://nodejs.cn/download/,点击自己适用的系统,自动下载跟电脑操作系统位数符合的安装包, 下载下来安装包 ...

随机推荐

  1. 桥梁(Bridge)模式

    桥梁(Bridge)模式:桥梁模式是一个非常有用的模式,也是比较复杂的一个模式.熟悉这个模式对于理解面向对象的设计原则,包括"开-闭"原则(OCP)以及组合/聚合复用原则(CARP ...

  2. 小议C#接口的隐式与显示实现(续)

    上文连接,讲的比较模糊,而且调用起来感觉比较混乱 http://www.cnblogs.com/walleyekneel/p/3581489.html 这次改为显式接口调用,可能项目也有这个一个需求 ...

  3. Vue watch用法

    Vue.js 提供了一个方法 watch,它用于观察Vue实例上的数据变动.对应一个对象,键是观察表达式,值是对应回调.值也可以是方法名,或者是对象,包含选项. 例如,同一个组件切换时,不会触发生命周 ...

  4. Dos命令 WIN10 WIFI命令

    设置WIFI命令: netsh wlan set hostednetwork ssid=T key=123456798 mode=allow netsh wlan start hostednetwor ...

  5. (转)使用vs调试的时候,如何知道程序阻塞在哪里?

    遇到一个问题,加了两个断点当运行到断点A后,我释放掉了,理想状态应该是在断点B停住,但并没有,程序感觉就像是阻塞了一样请问,这种状况如何知道程序当前是在哪里阻塞着? 回复: 可以让调试器停住,然后在调 ...

  6. MVC进阶篇(一)——概览

    前言 说到MVC,就得先说说框架是什么东西,MVC好多人都知道,是Model.view.controller,但是MVC到底是什么样的一个框架呢,好多人又说了是约定大于配置.下面我来说说我的理解. 内 ...

  7. 设置使用的python版本

    一.查看当前使用的python版本,或设置使用的python版本 二.python2中默认使用ASCII码,无法识别中文,报错如图,解决办法,设置字符集为utf-8

  8. mysql设计-基本操作

    mysql 设计 1)服务器管理 2)数据库管理 3)表管理 4)字段管理 5)索引管理 操作 1)sql语句 2)单表操作 3)多表操作 索引 记录 字段 mysam innodb ibdata1 ...

  9. PHP编码技巧

    原则 正确实现功能 执行速度与快 占系统资源少 后期维护方便 编程注意 1.命名很重要 2.适当的使用注释 3.使用一个变量,需要初始化 4.优先使用单引号 $row['id']的效率是$row[id ...

  10. C语言实现数组及链表的快速排序

    1. 数组快排: 方法一: #include <stdio.h> #include <stdlib.h> //交换 void swap(int *pi, int *pj) { ...