mfc 动态加载dll库,Mat转CImage,读ini配置文件,鼠标操作,在edit控件上画框,调试信息打印

这篇具有很好参考价值的文章主要介绍了mfc 动态加载dll库,Mat转CImage,读ini配置文件,鼠标操作,在edit控件上画框,调试信息打印。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

动态加载dll库

h文件中添加

#include "mydll.h"
#ifdef UNICODE  //区分字符集
#define LoadLibrary  LoadLibraryW
#else
#define LoadLibrary  LoadLibraryA
#endif // !UNICODE

typedef double(*mydllPtr)(int, int);


类内添加:
mydllPtr m_mydll; 

cpp文件中添加

初始化函数中添加:

HMODULE m_loadDll = LoadLibrary(TEXT("mydll.dll"));
if (m_loadDll == NULL)
	AfxMessageBox("mydll.dll load error.");

//m_mydll对应dll库中的mydll函数
m_mydll = (mydllPtr)GetProcAddress(m_loadDll, "mydll");


使用时:
m_mydll(int, int);

Mat转CImage,播放视频

//函数
void MatToCImage(Mat& mat, CImage& cimage)
{
	if (0 == mat.total())
	{
		return;
	}
	int nChannels = mat.channels();
	if ((1 != nChannels) && (3 != nChannels))
	{
		return;
	}
	int nWidth = mat.cols;
	int nHeight = mat.rows;
	//重建cimage
	cimage.Destroy();
	cimage.Create(nWidth, nHeight, 8 * nChannels);
	//拷贝数据
	uchar* pucRow;									//指向数据区的行指针
	uchar* pucImage = (uchar*)cimage.GetBits();		//指向数据区的指针
	int nStep = cimage.GetPitch();					//每行的字节数,注意这个返回值有正有负
	if (1 == nChannels)								//对于单通道的图像需要初始化调色板
	{
		RGBQUAD* rgbquadColorTable;
		int nMaxColors = 256;
		rgbquadColorTable = new RGBQUAD[nMaxColors];
		cimage.GetColorTable(0, nMaxColors, rgbquadColorTable);
		for (int nColor = 0; nColor < nMaxColors; nColor++)
		{
			rgbquadColorTable[nColor].rgbBlue = (uchar)nColor;
			rgbquadColorTable[nColor].rgbGreen = (uchar)nColor;
			rgbquadColorTable[nColor].rgbRed = (uchar)nColor;
		}
		cimage.SetColorTable(0, nMaxColors, rgbquadColorTable);
		delete[]rgbquadColorTable;
	}
	for (int nRow = 0; nRow < nHeight; nRow++)
	{
		pucRow = (mat.ptr<uchar>(nRow));
		for (int nCol = 0; nCol < nWidth; nCol++)
		{
			if (1 == nChannels)
			{
				*(pucImage + nRow * nStep + nCol) = pucRow[nCol];
			}
			else if (3 == nChannels)
			{
				for (int nCha = 0; nCha < 3; nCha++)
				{
					*(pucImage + nRow * nStep + nCol * 3 + nCha) = pucRow[nCol * 3 + nCha];
				}
			}
		}
	}

}


//使用
CRect rect;
GetDlgItem(IDC_STATIC_SHOW)->GetClientRect(&rect);
CDC* pDc = GetDlgItem(IDC_STATIC_SHOW)->GetDC();
pDc->SetStretchBltMode(COLORONCOLOR);
CImage image;
MatToCImage(mat, image);
image.Draw(pDc->m_hDC, rect); 

读ini配置文件

CString m_serialPort;
GetPrivateProfileString("test", "com", "", m_serialPort.GetBuffer(100), 100, "./config.ini");


config.ini文件
[test]
com=3

鼠标操作

左键按下弹起,右键按下弹起

h文件类内添加:
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);

cpp文件中添加:

BEGIN_MESSAGE_MAP(CIRCameraDemo_chaojingDlg, CDialogEx)
    ...
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_RBUTTONDOWN()
    ...
END_MESSAGE_MAP()

void CIRCameraDemo_chaojingDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: 在此添加控件通知处理程序代码

	CDialogEx::OnLButtonDown(nFlags, point);
}

void CIRCameraDemo_chaojingDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
	// TODO: 在此添加控件通知处理程序代码

	CDialogEx::OnLButtonUp(nFlags, point);
}

void CIRCameraDemo_chaojingDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加控件通知处理程序代码

	CDialogEx::OnRButtonDown(nFlags, point);
}

在Edit控件上画框

CDC* pDc = GetDlgItem(IDC_STATIC_SHOW)->GetDC();
CBrush *pOldBrush = (CBrush*)pDc->SelectStockObject(NULL_BRUSH);
CPen *pen = new CPen(PS_SOLID, 5, RGB(255, 0, 0));
CPen *pOldPen = pDc->SelectObject(pen);
pDc->Rectangle(CRect(m_startPoint, m_stopPoint));
pDc->SelectObject(pOldPen);
pDc->SelectObject(pOldBrush);
delete pen;

调试信息打印到输出界面

TRACE("temp= %d\n", temp);文章来源地址https://www.toymoban.com/news/detail-730051.html

到了这里,关于mfc 动态加载dll库,Mat转CImage,读ini配置文件,鼠标操作,在edit控件上画框,调试信息打印的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 无法找到mfc100.dll的解决方法分享,如何快速修复mfc100.dll文件

    在日常使用电脑时,我们可能会碰到一些系统错误提示,比如“无法找到mfc100.dll”的信息。这种错误通常会阻碍代码的执行或某些应用程序的启动。为了帮助您解决这一问题,本文将深入探讨其成因,并提供几种不同的mfc100.dll解决方案。让我们现在就来详细了解如何修复导

    2024年01月21日
    浏览(59)
  • 计算机中丢失mfc140.dll怎么解决?mfc140.dll是什么文件?

    在计算机运行软件或者游戏的时候,提示mfc140.dll丢失,无法正常启动运行。   mfc140.dll是Windows操作系统中用于支持C++编程语言的一个动态链接库,它包含了C++运行时库的一些基本功能。用于支持Microsoft Visual Studio的MFC(Microsoft Foundation Classes)应用程序。MFC是一种C++类库,用于

    2024年02月20日
    浏览(58)
  • mfc140u.dll丢失的解决方法,mfc140u.dll文件修复

    mfc140u.dll丢失的解决方法,其实要解决这个问题一点都不难,我们主要知道是什么原因造成的,那么就可以轻松的解决。 一.mfc140u.dll是什么 \\\"MFC140u.dll\\\"是一个Windows动态链接库文件,它是Microsoft Visual C++ 2015运行时的一部分。如果您的计算机上缺少\\\"MFC140u.dll\\\"文件,您可能会遇到

    2024年02月02日
    浏览(96)
  • mfc140u.dll丢失怎么修复,mfc140u.dll文件有什么作用

    今天我想和大家分享的是关于mfc140u.dll文件丢失的解决方法。在我们使用电脑的过程中,有时候会遇到一些错误提示,其中比较常见的就是“无法找到mfc140u.dll文件”。那么,这个文件是什么呢?它有什么作用呢? 首先,让我们来了解一下mfc140u.dll文件是什么。其实,mfc140u.

    2024年02月05日
    浏览(49)
  • mfc140u.dll是什么文件?mfc140u.dll丢失的下载方法

    在我们打开软件或者游戏的时候,电脑提示mfc140u.dll文件丢失,无法运行时需要怎么修复呢?mfc140u.dll是一款在Windows系统中非常更重要的一个文件,丢失不仅会导致软件跟游戏无法运行,电脑系统也容易崩溃,小编今天就把修复教程分享给大家。 首先需要将电脑开机再打开浏

    2024年02月04日
    浏览(64)
  • 运行软件找不到mfc140u.dll怎么解决,mfc140u.dll是什么文件

    \\\"找不到 mfc140u.dll\\\"是一条错误信息,表示您的计算机上缺少一个名为 mfc140u.dll 的动态链接库(DLL)文件。这个文件通常与 Microsoft Visual C++ Redistributable 相关。Mfc140u.dll 是 Microsoft 基础类库(MFC)的一个组件,它包含了许多用于开发 Windows 应用程序的类和功能。 当您尝试运行一

    2024年02月07日
    浏览(61)
  • 解析mfc100u.dll文件丢失的修复方法,快速解决mfc100u.dll问题

    在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“缺少某个文件”的错误。最近,我也遇到了一个这样的问题,那就是“mfc100u.dll丢失”。这个问题可能会导致某些应用程序无法正常运行,给我们带来困扰。本文将介绍五个有效的解决方法,帮助用户

    2024年02月06日
    浏览(56)
  • 电脑文件mfc100u.dll丢失的解决方法分析,怎么修复mfc100u.dll靠谱

    mfc100u.dll丢失了要怎么办?其实很多人都遇到过这样的电脑故障吧,说这个mfc100u.dll文件已经不见了,然后一些程序打不开了,那么这种情况我们要怎么解决呢?今天我们就来给大家详细的说说mfc100u.dll丢失的解决方法。 mfc100u.dll是 Microsoft Foundation Class (MFC) Library 的一部分,特

    2024年02月02日
    浏览(112)
  • mfc100u.dll文件丢失了要怎么解决?修复mfc100u.dll详细指南

    mfc100u.dll文件丢失了要怎么解决?首先让我们扒一扒什么是 mfc100u.dll。这玩意儿是 Microsoft Visual Studio 2010 的一部分,它就像一款程序生活中不可或缺的零件,没了它,程序肯定跑不起来。想想看,没有一个重要的零件,那你的机器还能运行么?,程序也是一样的。那怎么解决呢

    2024年02月03日
    浏览(55)
  • C# Assembly 反射动态加载程序集(动态加载Dll)Demo

    No1、本Demo 定义了一个接口IserviceToolFrame,接口中有一个方法Run。 No2、在另外两个工程中,分别定义两个类serviceToolCatComplete、serviceToolDogComplete实现接口IserviceToolFrame。 No3、控制台程序通过动态加载Dll的方式去调用IserviceToolFrame的实例,输出不同的内容。代码如下: 动态加载

    2024年02月15日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包