一道作业题,对各位来说一定都easy至极.可是我努力了一个星期最后还是有3个error.我本身真的不太会用vc++,上课也没学懂.请各位帮帮我吧,感激不禁!工程类型:SDI工程。
功能:1。在菜单 “文件-〉打开”项被点击后,要能弹出一个文件选择对话框。要求该对话框的“文件类型”comobox控件只能选择“BMP(*.bmp)”和“JPG(*.jpg)”两种文件类型。不能有“*.*”的选项。
2.在选择确定了图像文件之后,可以在客户区显示出该图像
3.在主菜单上添加一个新的选项:“设置”。该“设置”菜单有一个子菜单“参数”。
4.点击“参数”菜单之后,弹出一个Dialog。该Dialog的字体设定成宋体9号字。
6.根据x,y的输入,可以将图像分成4块。
7.“File->save”菜单可以将这4块图像碎片保存成4个图像bmp文件。
功能:1。在菜单 “文件-〉打开”项被点击后,要能弹出一个文件选择对话框。要求该对话框的“文件类型”comobox控件只能选择“BMP(*.bmp)”和“JPG(*.jpg)”两种文件类型。不能有“*.*”的选项。
2.在选择确定了图像文件之后,可以在客户区显示出该图像
3.在主菜单上添加一个新的选项:“设置”。该“设置”菜单有一个子菜单“参数”。
4.点击“参数”菜单之后,弹出一个Dialog。该Dialog的字体设定成宋体9号字。
6.根据x,y的输入,可以将图像分成4块。
7.“File->save”菜单可以将这4块图像碎片保存成4个图像bmp文件。
解决方案 »
- RichEidt中删除大量OLE对象(QQ动态表情)问题(程序崩溃)哪个好心人见过?
- 我要考研,也想写程序....
- 把vc6.0的工程移植到vs2008为什么会出现那么多的错误?
- WinInet编程的问题,HttpSendRequest总是返回ERROR_HTTP_INVALID_SERVER_RESPONSE
- 在线急等:无法import bmp 位图 ,
- cstring向COleDateTime转化了怎么得不到值?
- 怎样创建一个有最大最小化的对话框工程?
- 看了一篇内存文章,有几点不明(二)。
- 关于宏的菜鸟问题?
- MFC连接数据库问题,急!!!!!
- 在MDI中,为什么在各个子窗口里AfxMessageBox(),MessageBox(),显示的提示框看不见,还是根本没显示呢?
- 为何消息映射使用不了啊?
另外一点就是,针对不同文件格式有不同的处理函数1, char FilterString[]="WZQ file(*.wzq)|*.wzq"; CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
FilterString);
2,
BOOL CDibDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
CFile file;
CFileException fe;
if (!file.Open(lpszPathName, CFile::modeRead | CFile::shareDenyWrite, &fe))
{
AfxMessageBox("文件打不开");
return FALSE;
}//打开文件
DeleteContents();//删除文挡
BeginWaitCursor();
BITMAPFILEHEADER bmfHeader;//定义位图文件头结构
DWORD dwBitsSize;
HANDLE hDIB;
LPSTR pDIB;
BITMAPINFOHEADER *bmhdr;//指向位图信息头结构的指针
dwBitsSize = file.GetLength();//得到文件长度
if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) !=
sizeof(bmfHeader))
return FALSE;
if (bmfHeader.bfType != 0x4d42) file://检查是否为BMP文件
return FALSE;
hDIB=(HANDLE) ::GlobalAlloc(GMEM_MOVEABLE |
GMEM_ZEROINIT, dwBitsSize);
file://申请缓冲区
if (hDIB == 0)
{
return FALSE;
}
pDIB = (LPSTR) ::GlobalLock((HGLOBAL)hDIB);
file://得到申请的缓冲区的指针
if (file.ReadHuge(pDIB, dwBitsSize - sizeof(BITMAPFILEHEADER)) !=
dwBitsSize - sizeof(BITMAPFILEHEADER) )
{
::GlobalUnlock((HGLOBAL)hDIB);
hDIB=NULL;
return FALSE;
}//读数据,包括位图信息、位图颜色表、图像像素的灰度值
bmhdr=(BITMAPINFOHEADER*)pDIB;//为指向位图信息头结构的指针付值
::GlobalUnlock((HGLOBAL)hDIB);
if ((*bmhdr).biBitCount!=8) file://验证是否为8bit位图
return FALSE;
m_hDIB=hDIB;
InitDIBData();
file://自定义函数,根据读入的数据得到位图的宽、高、颜色表
file:// 来得到初始化视的尺寸、生成调色板
EndWaitCursor();
SetPathName(lpszPathName);//设置存储路径
SetModifiedFlag(FALSE); // 设置文件修改标志为FALSE
return TRUE;
}3,这个你看看书吧
4,这个在Dialog 中有设置单击右键-〉properties->General->Font->Size中进行更改
5,
6,觉得没什么问题但是要得到图像文件的大小
7,保存文件
BOOL CDibDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
CFile file;
CFileException fe;
BITMAPFILEHEADER bmfHdr; // 位图文件头结构
LPBITMAPINFOHEADER lpBI; file://指向位图信息结构的指针
DWORD dwDIBSize;
if (!file.Open(lpszPathName, CFile::modeCreate |
CFile::modeReadWrite | CFile::shareExclusive, &fe))
{
AfxMessageBox("文件打不开");
}//打开文件
BOOL bSuccess = FALSE;
BeginWaitCursor();
lpBI = (LPBITMAPINFOHEADER) ::GlobalLock((HGLOBAL) m_hDIB);
if (lpBI == NULL)
return FALSE;
dwDIBSize = *(LPDWORD)lpBI + 256*sizeof(RGBQUAD);
// Partial Calculation
DWORD dwBmBitsSize;//BMP文件信息结构所占的字节数
dwBmBitsSize=WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount)) *lpBI->biHeight;// 存储时位图所有像素所占的总字节数
dwDIBSize += dwBmBitsSize;
lpBI->biSizeImage = dwBmBitsSize; // 位图所有像素所占的总字节数
file://以下五句为文件头结构填充值
bmfHdr.bfType =0x4d42; // 文件为"BMP"类型
bmfHdr.bfSize = dwDIBSize + sizeof(BITMAPFILEHEADER);//文件总长度
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + lpBI->biSize
+ 256*sizeof(RGBQUAD);
file://位图数据距问件头的偏移量
file.Write((LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER));//写文件头
file.WriteHuge(lpBI, dwDIBSize);
file://将位图信息(信息头结构、颜色表、像素数据)写入文件
::GlobalUnlock((HGLOBAL) m_hDIB);
EndWaitCursor();
SetModifiedFlag(FALSE); // back to unmodified
return TRUE;
}
虽然我们根本都不认识,你能这样帮助我,让我太是感动了!!!!!!!
真是个好心的人!!!!
Thank you very much~~~~~~~~~~~~~~~!!!!!!!!!!!!!!!