我在vc++mfc中menu菜单中想打开一个文件,代码怎么写啊!急求
void CMainFrame::OnFileOpen() // 打开文件
{
// TODO: Add your command handler code here
static char BASED_CODE szFilter[] = "BMP Files (*.bmp)|*.bmp|All Files (*.*)|*.*||";
CFileDialog dlg(TRUE,"BMP",NULL,OFN_HIDEREADONLY|
OFN_OVERWRITEPROMPT,szFilter);
if(dlg.DoModal() == IDOK)
{
//这块儿填写打开文件后对文件相应的操作,就是打开一个文件按照他原来的格式打开
}
追问:可以详细一点吗?俺是菜鸟
答案:我看你是打开的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);
其他:可以试试序列化操作,定义Serialize(CArchive& ar),在此函数中类似于这样定义:
if(ar.IsStoring())
ar<<......;\\写入
else
ar>>.......;\\读出
上一个:用vc++编写工资统计程序代码应该先怎么做?
下一个:以前运行的程序,现在没法运行了,总是出错,opencv vc++6.0