我在vc++mfc中menu菜单中想打开一个文件,代码怎么写啊!急求

2025-03-09 09:03:38
推荐回答(2个)
回答1:

我看你是打开的bmp文件,给你个bmp的读取格式
#define WIDTH_BYTES(bits) (((bits) + 31) / 32 * 4)
BOOL OpenBMPFile(LPCSTR lpFileName, BITMAPINFO *pBmpInfo, BYTE *pImageBuffer)
{
BOOL bRVal = TRUE;
DWORD dwBytesRead = 0;
DWORD dwSize = 0;
BITMAPFILEHEADER bfh;

HANDLE hFile = ::CreateFile(lpFileName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (hFile == INVALID_HANDLE_VALUE) {
bRVal = FALSE;
}
else{
dwSize = sizeof(BITMAPFILEHEADER);
::ReadFile(hFile, &bfh, dwSize, &dwBytesRead, NULL );
if (bfh.bfType != ((WORD)'M' << 8 | 'B')) {
bRVal = FALSE;
}
else{
dwSize = sizeof(BITMAPINFOHEADER);
::ReadFile(hFile, pBmpInfo, dwSize, &dwBytesRead, NULL);
if (pBmpInfo->bmiHeader.biBitCount <= 8) {
dwSize = bfh.bfOffBits - sizeof(BITMAPFILEHEADER) - sizeof(BITMAPINFOHEADER);
ReadFile(hFile,
(char *)pBmpInfo + sizeof(BITMAPINFOHEADER),
dwSize,
&dwBytesRead,
NULL
);
}

dwSize = WIDTH_BYTES(pBmpInfo->bmiHeader.biWidth * pBmpInfo->bmiHeader.biBitCount) *
pBmpInfo->bmiHeader.biHeight;

ReadFile(hFile, pImageBuffer, dwSize, &dwBytesRead, NULL);

}

CloseHandle(hFile);
}

return bRVal;
}

一般文件的读取方式,给你个C语言的吧
FILE *fp;
fp = fopen(dlg.GetPathName().Replace("\\","\\\\"),"rb");
fseek(fp, 0L,SEEK_END);
long len = ftell(fp);
fseek(fp, 0L, SEEK_SET);
fread(StdImg, sizeof(BYTE), len, fp);
fclose(fp);

回答2:

可以试试序列化操作,定义Serialize(CArchive& ar),在此函数中类似于这样定义:
if(ar.IsStoring())
ar<<......;\\写入
else
ar>>.......;\\读出