之前都是用qt做界面,MFC方式未使用过。公司现场需求,学习下MFC

闲言碎语

  • 4、思来想去,把效果放在文首吧
  • 1、创建MFC项目
  • 2、搭建界面
  • 3、配置代码
4、思来想去,把效果放在文首吧

1、创建MFC项目

选择MFC应用,下一步,填写项目相关信息,名称和路径。我这里CSDNShowCamera,之后点击创建

开始配置MFC应用程序具体参数

1、选择 基于对话框 应用程序类型;
2、下一步,再下一步,取消 粗框架和系统菜单 勾选
3、完成后,直接完成

进入编辑界面

2、搭建界面

这里制作一个简单的图像读取显示界面

  1. 删除界面TODO、删除取消按钮、将确定按钮中文字确定修改成close

    修改的模块的参数,点击该工具,右键属性,会跳出该工具属性框,如下
    

修改描述文字:确定 -> close
  1. 添加图片显示控件(Picture Control,可以在界面右侧工具箱中搜索),鼠标点击拖曳到主界面上,如下

属性 杂项:
1、修改ID: IDC_STATIC -> IDC_IMG_COGNEX
2、调整框子大小
  1. 添加一个控件 Button,用于显示图片

修改描述文字:     -> ReadImg

以上项目界面配置完成,接下来进行控件相应代码配置

3、配置代码
  1. 配置opencv属性

    VC++目录 -> 包含目录 :opencvG:\VisualStudioCode\configuration_libs\opencv411\includeG:\VisualStudioCode\configuration_libs\opencv411\include\opencv2:MVS G:\VisualStudioCode\configuration_libs\MVS\Development\Includes:torchG:\VisualStudioCode\configuration_libs\libtorch-win-shared-with-deps-1.8.0+cu111\libtorch\includeVC++目录 -> 库目录  :opencv        G:\VisualStudioCode\configuration_libs\opencv411\x64\vc15\lib:torchG:\VisualStudioCode\configuration_libs\libtorch-win-shared-with-deps-1.8.0+cu111\libtorch\lib:MVSG:\VisualStudioCode\configuration_libs\MVS\Development\Libraries\win64G:\VisualStudioCode\configuration_libs\MindVision\SDK\X64
    

链接器->输入->附加依赖项:
MVCAMSDK_X64.lib
MvCameraControl.lib
torch.lib
torch_cpu.lib
c10.lib
caffe2_detectron_ops_gpu.lib
caffe2_module_test_dynamic.lib
opencv_world411.lib
asmjit.lib
clog.lib
cpuinfo.lib
dnnl.lib
fbgemm.lib
libprotobuf.lib
libprotobuf-lite.lib
libprotoc.lib
mkldnn.lib

配置好后,开始写控件代码;针对每一个控件,如若有相应代码响应的话,双击该控件即可进入代码编辑界面;

  • 2.1 CSDNShowCameraDlg.cpp
/*获取指定文件夹下的文件*/
void CCSDNShowCameraDlg::getFiles(std::string path, std::vector<std::string>& files)
{intptr_t   hFile = 0;struct _finddata_t fileinfo;std::string p;if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1){do{if ((fileinfo.attrib & _A_SUBDIR)){if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)getFiles(p.assign(path).append("\\").append(fileinfo.name), files);}else{files.push_back(p.assign(path).append("\\").append(fileinfo.name));}} while (_findnext(hFile, &fileinfo) == 0);_findclose(hFile);}
}
char string_print_file_dir[1024] = "";//获取指定文件夹内的所有图片sprintf_s(string_print_file_dir, "%s", "E:\\Download\\hawen\\");char* filePath = string_print_file_dir;std::vector<std::string> files;std::vector<cv::Mat> gradient_list;getFiles(filePath, files);//自定义的一个函数,如下char string_print_10[1024] = "";int cnttest = 1;sprintf_s(string_print_10, "\n%10s: %s\n", "当前识别图片", files[cnttest].c_str());for (size_t num=0; num < files.size(); num ++){sprintf_s(string_print_10, "\n%10s: %s", "当前识别图片", files[num].c_str());std::cout << string_print_10;Sleep(2000);}
void CCSDNShowCameraDlg::ReadImg(std::string img_path)
{//define all variablescv::Mat Rect_img;cvimage = cv::imread(img_path, 0);std::cout << ",   读取完成......" ;CRect rect;GetDlgItem(IDC_IMG_COGNEX)->GetWindowRect(&rect);  // 获取控件大小//show the imageresize(cvimage, Rect_img, cv::Size(rect.Width(), rect.Height()));switch (Rect_img.channels()){case 1:cv::cvtColor(Rect_img, Rect_img, cv::COLOR_GRAY2BGRA); // GRAY单通道      break;case 3:cv::cvtColor(Rect_img, Rect_img, cv::COLOR_BGR2BGRA);  // BGR三通道       break;default:      break;}int pixelBytes = Rect_img.channels() * (Rect_img.depth() + 1); // 计算一个像素多少个字节BITMAPINFO bitInfo;bitInfo.bmiHeader.biBitCount = 8 * pixelBytes;bitInfo.bmiHeader.biWidth = Rect_img.cols;bitInfo.bmiHeader.biHeight = -Rect_img.rows;bitInfo.bmiHeader.biPlanes = 1;bitInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);bitInfo.bmiHeader.biCompression = BI_RGB;bitInfo.bmiHeader.biClrImportant = 0;bitInfo.bmiHeader.biClrUsed = 0;bitInfo.bmiHeader.biSizeImage = 0;bitInfo.bmiHeader.biXPelsPerMeter = 0;bitInfo.bmiHeader.biYPelsPerMeter = 0;//CDC* pDC = GetDlgItem(IDC_IMG_COGNEX)->GetDC();::StretchDIBits(sfdc,0, 0, rect.Width(), rect.Height(),0, 0, rect.Width(), rect.Height(),Rect_img.data,&bitInfo,DIB_RGB_COLORS,SRCCOPY);//ReleaseDC(pDC);///draw image to client
}

  • 2.2 CSDNShowCameraDlg.h

    // CSDNShowCameraDlg.h: 头文件
    //#pragma once
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include "opencv2/opencv.hpp"#include <io.h>
    #include <iostream>
    #include <fstream>
    using namespace cv;// CCSDNShowCameraDlg 对话框
    class CCSDNShowCameraDlg : public CDialogEx
    {
    // 构造
    public:CCSDNShowCameraDlg(CWnd* pParent = nullptr);    // 标准构造函数// 对话框数据
    #ifdef AFX_DESIGN_TIMEenum { IDD = IDD_CSDNSHOWCAMERA_DIALOG };
    #endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持HDC sfdc;cv::Mat cvimage;void getFiles(std::string path, std::vector<std::string>& files);//获取文件夹下所有图片void ReadImg(std::string img_path);//读取图片,显示// 实现
    protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()
    public:afx_msg void OnBnClickedButton1();
    };
    

c++ ——第一个MFC界面相关推荐

  1. 【MFC】创建第一个MFC界面项目

    00. 目录 文章目录 00. 目录 01. 概述 02. 使用项目模板创建项目 03. 运行结果 04. 附录 01. 概述 要创建MFC应用程序,可以使用向导来自定义的项目.也可以从头创建应用程序 ...

  2. C++ MFC界面读写USB HID设备数据程序

    C++ MFC界面读写USB HID设备数据程序 发一个简单易用的界面,用来对USB HID设备(比如说游戏手柄,控制面板等)读写数据,一般情况下面板上有一些LED,可以帮助我们测试读写是否正确.另外 ...

  3. 从一个MFC工程移植对话框类到另一个MFC工程

    今天碰到模块移植问题了,自己做的对话框类(继承于CDialog)要移植到目标工程中.在网上搜了几个帖子发现都说的很生涩.问了我们的技术总监之后总算解决这个问题了. 问题:把一个MFC SDI工程中的一 ...

  4. MFC界面编程基础(08):菜单(一)

    上一篇:MFC界面编程基础(07):文本编程 下一篇:MFC界面编程基础(09):菜单(二) 菜单栏.工具栏和状态栏是组成Windows程序图形界面的三个主要元素.大多数Windows程序都提供了菜单 ...

  5. 从0开始创建一个MFC单文档工程

    MFC单文档快速入门教程 开发环境 win7+vs2019 如何创建一个新的MFC单文档项目 如何创建菜单添加点击事件 创建菜单我的->测试的菜单 修改测试的菜单ID为ID_MY_TEST如下 ...

  6. MFC界面开发中的一些问题

    1.如何更改MFC界面背景颜色?     在界面对话框的C***Dlg::OnPaint()函数里的else之后的括号中插入以下代码:    CRect rect;          CPaintDC ...

  7. MFC系列 - 第一个MFC入门程序

    MFC,多年开发和教学,这门课程,新课改决定将它砍掉,Qt也是我们的趋势,同时在我的Qt系列中详细讲解了Qt的系列教学.MFC虽然很古老,但是还是得佩服微软搞得这套框架,让一代又一代Windows程序 ...

  8. 2016-12-26 菜鸟上路(4)——VS中关于MFC界面设计

    今天的主要活动是白天的实习和晚上开始研究的课设内容. VS的用法跟VC差了不少,宝宝整体是懵逼的状态,去网上查了一下,起码搞清楚了VS里MFC对话框在哪里找_(:з」∠)_ 以及,当 出现" ...

  9. MFC界面编程基础(00):基本概念

    下一篇:MFC界面编程基础(01):Windows 编程模型 MFC:微软基础类库(英语:Microsoft Foundation Classes,简称MFC) 如果你是在windows平台上做GUI ...

  10. MFC——我的第一个MFC

    我的第一个MFC 一."什么是MFC" 二.创建一个MFC 0.编译freeimage 1.在VS2022创建MFC 2.编写代码前3步骤 3.编辑代码 编辑pch.h 编辑doc ...

最新文章

  1. java unsafe获取指针_【实战Java高并发程序设计 1】Java中的指针:Unsafe类
  2. ping命令使用及其常用参数
  3. 使用html格式,通过php调用数据库并显示数据
  4. Netty消息接收类故障案例分析
  5. office word 开发
  6. linux——vim命令详细说明
  7. java 全局变量 内存不回收_JAVA知识梳理:内存管理与垃圾回收机制
  8. c语言 错误 无效的控制谓词,PAT 1025反转链表的代码实现及错误分析(C语言)
  9. 08.update_by_query操作
  10. html为什么要进行表单验证_化学锚栓为什么要进行拉拔试验?
  11. 生物学专业_江南大学微生物学(发酵)20002008历年考研专业课真题汇编
  12. IIS Web怪问题: Access is denied due to invalid credentials.
  13. excel图表交互联动_Excel图表联动的三种方法
  14. Linux环境下安装yafu
  15. java爬虫视频教程_JAVA开发教程:java视频教程java爬虫实战项目 百度网盘
  16. zblog仿站教程 - 常用模板标签
  17. zuul - 微服务(十三)
  18. (2015年度)黑龙江测绘地理信息局青年学术和技术带头人考评与增选公示
  19. 业务分析报告与数据可视化报表
  20. 课程设计------学生考勤管理系统

热门文章

  1. pioneer软件VoLTE测试步骤,Pioneer操作说明.docx
  2. IDEA 常用快捷键
  3. 运筹学-运输问题-最小元素法
  4. cmder添加到系统变量中_Cmder详细设置
  5. 项目管理第十一章项目风险管理
  6. 备忘--moodle安装
  7. 手机麦克风结构原理图_驻极体电容式麦克风结构和工作原理
  8. 12864 C语言程序 带详细注解
  9. 《Shell 脚本学习指南 》 -- 背景知识与入门 [第一、二章]
  10. 1_Hadoop安装部署及常用配置(HDFS+YARN)