一道作业题,对各位来说一定都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文件。
解决方案 »
- vc++源文件不会打开
- 分割窗口
- 关于重叠IO的模型,小弟看了小猪的文章但还是有些不明白的地方.....等待
- 无边框对话框如何拖动改变大小?
- 关于SHELLEXECUTE()
- 请问如何设置工程的堆栈大小?
- 有没有办法在vc的图形环境下使用execvp调用控制台程序后不退出整个程序?解决后分数再加80
- 怎样才能成为一个好的程序员?现在程序员的就业行情怎么样?:)
- 用ODBC访问数据库,如何得到某一列的和值sum呢?
- 怎样把CComBSTR转换成LPCTSTR???
- 在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~~~~~~~~~~~~~~~!!!!!!!!!!!!!!!