c++ ——第一个MFC界面
之前都是用qt做界面,MFC方式未使用过。公司现场需求,学习下MFC
闲言碎语
- 4、思来想去,把效果放在文首吧
- 1、创建MFC项目
- 2、搭建界面
- 3、配置代码
4、思来想去,把效果放在文首吧
1、创建MFC项目
选择MFC应用,下一步,填写项目相关信息,名称和路径。我这里CSDNShowCamera,之后点击创建
开始配置MFC应用程序具体参数
1、选择 基于对话框 应用程序类型;
2、下一步,再下一步,取消 粗框架和系统菜单 勾选
3、完成后,直接完成
进入编辑界面
2、搭建界面
这里制作一个简单的图像读取显示界面
删除界面TODO、删除取消按钮、将确定按钮中文字确定修改成close
修改的模块的参数,点击该工具,右键属性,会跳出该工具属性框,如下
修改描述文字:确定 -> close
- 添加图片显示控件(Picture Control,可以在界面右侧工具箱中搜索),鼠标点击拖曳到主界面上,如下
属性 杂项:
1、修改ID: IDC_STATIC -> IDC_IMG_COGNEX
2、调整框子大小
- 添加一个控件 Button,用于显示图片
修改描述文字: -> ReadImg
以上项目界面配置完成,接下来进行控件相应代码配置
3、配置代码
配置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界面相关推荐
- 【MFC】创建第一个MFC界面项目
00. 目录 文章目录 00. 目录 01. 概述 02. 使用项目模板创建项目 03. 运行结果 04. 附录 01. 概述 要创建MFC应用程序,可以使用向导来自定义的项目.也可以从头创建应用程序 ...
- C++ MFC界面读写USB HID设备数据程序
C++ MFC界面读写USB HID设备数据程序 发一个简单易用的界面,用来对USB HID设备(比如说游戏手柄,控制面板等)读写数据,一般情况下面板上有一些LED,可以帮助我们测试读写是否正确.另外 ...
- 从一个MFC工程移植对话框类到另一个MFC工程
今天碰到模块移植问题了,自己做的对话框类(继承于CDialog)要移植到目标工程中.在网上搜了几个帖子发现都说的很生涩.问了我们的技术总监之后总算解决这个问题了. 问题:把一个MFC SDI工程中的一 ...
- MFC界面编程基础(08):菜单(一)
上一篇:MFC界面编程基础(07):文本编程 下一篇:MFC界面编程基础(09):菜单(二) 菜单栏.工具栏和状态栏是组成Windows程序图形界面的三个主要元素.大多数Windows程序都提供了菜单 ...
- 从0开始创建一个MFC单文档工程
MFC单文档快速入门教程 开发环境 win7+vs2019 如何创建一个新的MFC单文档项目 如何创建菜单添加点击事件 创建菜单我的->测试的菜单 修改测试的菜单ID为ID_MY_TEST如下 ...
- MFC界面开发中的一些问题
1.如何更改MFC界面背景颜色? 在界面对话框的C***Dlg::OnPaint()函数里的else之后的括号中插入以下代码: CRect rect; CPaintDC ...
- MFC系列 - 第一个MFC入门程序
MFC,多年开发和教学,这门课程,新课改决定将它砍掉,Qt也是我们的趋势,同时在我的Qt系列中详细讲解了Qt的系列教学.MFC虽然很古老,但是还是得佩服微软搞得这套框架,让一代又一代Windows程序 ...
- 2016-12-26 菜鸟上路(4)——VS中关于MFC界面设计
今天的主要活动是白天的实习和晚上开始研究的课设内容. VS的用法跟VC差了不少,宝宝整体是懵逼的状态,去网上查了一下,起码搞清楚了VS里MFC对话框在哪里找_(:з」∠)_ 以及,当 出现" ...
- MFC界面编程基础(00):基本概念
下一篇:MFC界面编程基础(01):Windows 编程模型 MFC:微软基础类库(英语:Microsoft Foundation Classes,简称MFC) 如果你是在windows平台上做GUI ...
- MFC——我的第一个MFC
我的第一个MFC 一."什么是MFC" 二.创建一个MFC 0.编译freeimage 1.在VS2022创建MFC 2.编写代码前3步骤 3.编辑代码 编辑pch.h 编辑doc ...
最新文章
- java unsafe获取指针_【实战Java高并发程序设计 1】Java中的指针:Unsafe类
- ping命令使用及其常用参数
- 使用html格式,通过php调用数据库并显示数据
- Netty消息接收类故障案例分析
- office word 开发
- linux——vim命令详细说明
- java 全局变量 内存不回收_JAVA知识梳理:内存管理与垃圾回收机制
- c语言 错误 无效的控制谓词,PAT 1025反转链表的代码实现及错误分析(C语言)
- 08.update_by_query操作
- html为什么要进行表单验证_化学锚栓为什么要进行拉拔试验?
- 生物学专业_江南大学微生物学(发酵)20002008历年考研专业课真题汇编
- IIS Web怪问题: Access is denied due to invalid credentials.
- excel图表交互联动_Excel图表联动的三种方法
- Linux环境下安装yafu
- java爬虫视频教程_JAVA开发教程:java视频教程java爬虫实战项目 百度网盘
- zblog仿站教程 - 常用模板标签
- zuul - 微服务(十三)
- (2015年度)黑龙江测绘地理信息局青年学术和技术带头人考评与增选公示
- 业务分析报告与数据可视化报表
- 课程设计------学生考勤管理系统