我在int main前声明了
可是还是报错
#include <iostream>
#include <Windows.h>
using namespace std;
bool SaveBitmapFile(HDC hdc, PBITMAPINFO pbmi, PBYTE pBits, LPCTSTR lpszFileName);
int main()
{
// 定义变量
HDC hdcScreen;
HDC hdcMemDC = NULL;
HBITMAP hbmScreen = NULL;
BITMAP bmpScreen;
// 获取屏幕DC
hdcScreen = GetDC(NULL);
// 创建一个内存DC
hdcMemDC = CreateCompatibleDC(hdcScreen);
// 获取屏幕尺寸
int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
// 创建一个屏幕大小的位图
hbmScreen = CreateCompatibleBitmap(hdcScreen, nScreenWidth, nScreenHeight);
// 将位图选入到内存DC中
SelectObject(hdcMemDC, hbmScreen);
// 将屏幕DC拷贝到内存DC中
BitBlt(hdcMemDC, 0, 0, nScreenWidth, nScreenHeight, hdcScreen, 0, 0, SRCCOPY);
// 从内存DC中获取屏幕图像数据
GetObject(hbmScreen, sizeof(BITMAP), &bmpScreen);
// 将图像数据保存到文件中
SaveBitmapFile(hdcMemDC, &bmpScreen, "screen.bmp");
// 释放资源
DeleteObject(hbmScreen);
DeleteDC(hdcMemDC);
ReleaseDC(NULL, hdcScreen);
return 0;
}
// 保存位图文件
bool SaveBitmapFile(HDC hdc, PBITMAPINFO pbmi, PBYTE pBits, LPCTSTR lpszFileName)
{
HANDLE hf; // 文件句柄
BITMAPFILEHEADER hdr; // 位图文件头
PBITMAPINFOHEADER pbih; // 位图信息头
LPBYTE lpBits; // 指向位图数据的指针
DWORD dwTotal; // 总字节数
DWORD cb; // 写入文件的字节数
BYTE *hp; // 指向位图数据的指针
DWORD dwTmp;
pbih = (PBITMAPINFOHEADER)pbmi;
lpBits = (LPBYTE)pBits;
// 计算位图文件大小
dwTotal = pbih->biSizeImage + sizeof(BITMAPFILEHEADER) + pbih->biSize +
pbih->biClrUsed * sizeof(RGBQUAD);
// 为位图文件头填充数据
hdr.bfType = 0x4d42; // bfType为"BM"
hdr.bfSize = dwTotal; // bfSize为文件大小
hdr.bfReserved1 = 0; // bfReserved1和bfReserved2都为0
hdr.bfReserved2 = 0;
hdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + pbih->biSize +
pbih->biClrUsed * sizeof (RGBQUAD);
// 创建位图文件
hf = CreateFile(lpszFileName, GENERIC_READ | GENERIC_WRITE,
(DWORD)0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,
(HANDLE)NULL);
if (hf == INVALID_HANDLE_VALUE)
return FALSE;
// 将位图文件头写入文件
WriteFile(hf, (LPVOID)&hdr, sizeof(BITMAPFILEHEADER), (LPDWORD)&dwTmp, NULL);
// 将位图信息头和调色板写入文件
WriteFile(hf, (LPVOID)pbih, sizeof(BITMAPINFOHEADER) + pbih->biClrUsed *
sizeof (RGBQUAD), (LPDWORD)&dwTmp, ( NULL));
// 将位图数据写入文件
dwTotal = cb = pbih->biSizeImage;
hp = lpBits;
WriteFile(hf, (LPSTR)hp, (int)cb, (LPDWORD)&dwTmp,NULL);
// 关闭文件
CloseHandle(hf);
return TRUE;
}
编译器显示:
第29行 第54列 D:\桌面\348.cpp [Error] cannot convert 'BITMAP* {aka tagBITMAP*}' to 'PBITMAPINFO {aka tagBITMAPINFO*}' for argument '2' to 'bool SaveBitmapFile(HDC, PBITMAPINFO, PBYTE, LPCTSTR)'
请问这是什么问题?
这是个录屏软件