if (!strpointmap.empty()) if (strpointmap[n].Find(L"png") != -1 || strpointmap[n].Find(L"PNG") != -1) { image.Load(strpointmap[n]); CDC* pDialogDC = GetDC(); CRect mrect; CPen pen(PS_SOLID, 3, RGB(200, 200, 200)); CBrush pbrush; pbrush.CreateSolidBrush(RGB(200, 200, 200)); pDialogDC->SelectObject(&pen); pDialogDC->SelectObject(&pbrush); pDialogDC->Rectangle(rectPicture); int mleft = move_x[changenum]; int mright = change_x[changenum] + image.GetWidth(); int mtop = move_y[changenum]; int mbottom = change_y[changenum] + image.GetHeight(); int width = (int)(image.GetWidth() * nScalePercent / 100.0f); int height = (int)(image.GetHeight() * nScalePercent / 100.0f); CBitmap bitmap; bitmap.CreateBitmap(width, height, image.GetBPP(), 1, NULL); CDC* pDC = m_pictureCtrl.GetDC(); CDC memDC; memDC.CreateCompatibleDC(pDC); CBitmap* pOldBitmap = memDC.SelectObject(&bitmap); memDC.SetStretchBltMode(COLORONCOLOR); image.StretchBlt(memDC.GetSafeHdc(), 0, 0, width, height, SRCCOPY); memDC.SelectObject(pOldBitmap); m_pictureCtrl.SetBitmap(bitmap.Detach()); m_nScalePercent = nScalePercent;代码中有错误HGDIOBJ" 类型的实参与 "HBITMAP" 类型的形参不兼容,而且在CBitmap* pOldBitmap = memDC.SelectObject(bitmap);中memDC"HGDIOBJ" 类型的值不能用于初始化 "CBitmap *" 类型的实体
时间: 2024-02-28 07:54:56 浏览: 67
这段代码中的错误是将一个 HGDIOBJ 类型的对象作为参数传递给了一个需要 HBITMAP 类型对象的函数。具体来说,是在以下代码中出现的问题:
```C++
CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);
```
应该将其改为:
```C++
CBitmap* pOldBitmap = memDC.SelectObject(bitmap);
```
另外,在以下代码中,应该将 memDC 的类型从 CDC 改为 CMemDC,以避免内存泄漏:
```C++
CDC memDC;
```
改为:
```C++
CMemDC memDC(pDC, &bitmap);
```
相关问题
D:\lpng\lpng1639>nmake -f scripts\makefile.vc Microsoft (R) 程序维护实用工具 14.36.32537.0 版 版权所有 (C) Microsoft Corporation。 保留所有权利。 NMAKE : fatal error U1052: 未找到文件“scripts\makefile.vc” Stop.
很抱歉,我之前提供的指令有误。根据你提供的信息,你在 libpng 源代码文件夹中运行 `nmake -f scripts\makefile.vc` 命令时出现了错误。
这个错误的原因可能是因为 libpng 的源代码中没有名为 "scripts\makefile.vc" 的文件。请确保你在正确的文件夹中运行命令,并且已经正确地解压了 libpng 的源代码。
以下是一种可能的解决方案:
1. 打开命令提示符或者 PowerShell。
2. 导航到 libpng 源代码的文件夹。你可以使用 `cd` 命令来导航到正确的文件夹路径。
3. 运行以下命令来编译 libpng:
```
nmake -f makefile.vc
```
这将使用默认的 makefile.vc 文件进行编译。
请确保你已经正确设置了编译环境,并且已经安装了编译所需的工具。如果问题仍然存在,请确保你已经正确地解压了 libpng 的源代码,并且在正确的文件夹中运行命令。如果问题仍然持续,请提供更多详细信息,以便我能够更好地帮助你解决问题。
D:\lpng\lpng1639>nmake -f scripts\makefile.vc 'nmake' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
如果你在运行 `nmake` 命令时收到 "‘nmake’ 不是内部或外部命令" 的错误提示,这意味着你的系统中没有安装 Visual Studio 的开发工具。
在 Windows 上使用 Visual Studio 的开发工具来编译 libpng 需要进行以下步骤:
1. 首先,确保你已经安装了 Visual Studio。你可以从官方网站 https://visualstudio.microsoft.com/ 下载并安装 Visual Studio Community 版本或者其他适用于 C++ 开发的版本。
2. 在安装 Visual Studio 时,请确保选择了包括 C++ 开发工具以及 Windows SDK 的选项。
3. 打开 "开始菜单",搜索并打开 "x64 Native Tools Command Prompt for <版本号>",其中 `<版本号>` 是你安装的 Visual Studio 版本号。例如,对于 Visual Studio 2019,你可以打开 "x64 Native Tools Command Prompt for VS 2019"。
4. 在打开的命令提示符中,导航到 libpng 源代码的文件夹。
5. 运行以下命令来编译 libpng:
```
nmake -f scripts\makefile.vc
```
这将使用 Visual Studio 的开发工具链编译 libpng。
如果你按照上述步骤进行操作,应该能够成功编译 libpng 并生成相应的静态库文件。请确保在正确选择 Visual Studio 版本的前提下进行操作,并且已经正确设置了开发环境。
阅读全文