热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c++——第一个MFC界面

之前都是用qt做界面,MFC方式未使用过。公司现场需求,学习下MFC闲言碎语4、思来想去,把效果放在文首吧1、创建MFC项目2、搭建界面3

之前都是用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& 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 files;std::vector 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

void CCSDNShowCameraDlg::ReadImg(std::string img_path)
{//define all variablescv::Mat Rect_img;cvimage &#61; 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 &#61; Rect_img.channels() * (Rect_img.depth() &#43; 1); // 计算一个像素多少个字节BITMAPINFO bitInfo;bitInfo.bmiHeader.biBitCount &#61; 8 * pixelBytes;bitInfo.bmiHeader.biWidth &#61; Rect_img.cols;bitInfo.bmiHeader.biHeight &#61; -Rect_img.rows;bitInfo.bmiHeader.biPlanes &#61; 1;bitInfo.bmiHeader.biSize &#61; sizeof(BITMAPINFOHEADER);bitInfo.bmiHeader.biCompression &#61; BI_RGB;bitInfo.bmiHeader.biClrImportant &#61; 0;bitInfo.bmiHeader.biClrUsed &#61; 0;bitInfo.bmiHeader.biSizeImage &#61; 0;bitInfo.bmiHeader.biXPelsPerMeter &#61; 0;bitInfo.bmiHeader.biYPelsPerMeter &#61; 0;//CDC* pDC &#61; 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
    #include
    #include "opencv2/opencv.hpp"#include
    #include
    #include
    using namespace cv;// CCSDNShowCameraDlg 对话框
    class CCSDNShowCameraDlg : public CDialogEx
    {
    // 构造
    public:CCSDNShowCameraDlg(CWnd* pParent &#61; nullptr); // 标准构造函数// 对话框数据
    #ifdef AFX_DESIGN_TIMEenum { IDD &#61; IDD_CSDNSHOWCAMERA_DIALOG };
    #endifprotected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持HDC sfdc;cv::Mat cvimage;void getFiles(std::string path, std::vector& files);//获取文件夹下所有图片void ReadImg(std::string img_path);//读取图片&#xff0c;显示// 实现
    protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()
    public:afx_msg void OnBnClickedButton1();
    };

在这里插入图片描述


推荐阅读
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文讨论了在iOS平台中的Metal框架中,对于if语句中的判断条件的限制和处理方式。作者提到了在Metal shader中,判断条件不能写得太长太复杂,否则可能导致程序停留或没有响应。作者还分享了自己的经验,建议在CPU端进行处理,以避免出现问题。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 技嘉秀高端B450主板:不再支持第七代APU,性价比高且兼容锐龙一代和二代
    在台北电脑展上,技嘉展示了一款高端的B450主板,型号为“b450 aorus pro wi-fi”。该主板具有10+1相供电、散热片覆盖的供电区域和芯片组,以及两个m.2插槽和背部IO挡板。虽然不支持第七代APU bristol ridge,但它兼容锐龙一代和二代,且具有较高的性价比。该主板还配备了音频声卡、Wi-Fi无线网卡等功能,是一款性能出色且设计精良的主板。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
author-avatar
和尚与尼姑离婚
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有