引言
本文致力于提供MFC的相关知识,以方便大家更好地认识MFC的使用方法。介绍将会分为以下几个部分:MFC初始文件的理解、MFC我们所使用的框架理解、MFC的进阶用法、MFC我在使用过程中遇到的问题及解决方法。
MFC初始文件的理解
MFC的初始文件中有两项文件是我们经常需要使用的,其余文件可以暂时忽略,我们基本不会用上。一个是MFCApplicationView,我们简称View类,一个是MFCApplicationDoc,我们简称Doc类。
Doc类是Document的缩写,是用来处理程序与计算机文件的关系的,我们读取、保存文件就是通过这个类实现的,我们如果想要获取读取的图像信息,也都是通过Doc类进行读取的。例如以下这个我们常用的代码段。
CMFCApplication1Doc* pDoc = GetDocument();// 获取文档 //
long lSrcLineBytes; //图象每行的字节数
long lSrcWidth; //图象的宽度和高度
long lSrcHeight;
int lpSrcBitCount; //图像的位深
LPSTR lpSrcDib; //指向源图象的指针
LPSTR lpSrcStartBits; //指向源像素的指针
lpSrcDib = (LPSTR) ::GlobalLock((HGLOBAL)pDoc->GetHObject());// 锁定DIB
if (!lpSrcDib) return;
/*
if (pDoc->m_dib.GetColorNum(lpSrcDib) != 256)// 判断是否是8-bpp位图
{
AfxMessageBox(L"对不起,不是256色位图!");// 警告
::GlobalUnlock((HGLOBAL) pDoc->GetHObject());// 解除锁定
return; //返回
} //判断是否是8-bpp位图,不是则返回
*/
lpSrcStartBits = pDoc->m_dib.GetBits(lpSrcDib); // 找到DIB图象像素起始位置
lSrcWidth = pDoc->m_dib.GetWidth(lpSrcDib); // 获取图象的宽度
lSrcHeight = pDoc->m_dib.GetHeight(lpSrcDib); // 获取图象的高度
lpSrcBitCount = pDoc->m_dib.GetBitCount(lpSrcDib); //获取图像位深
lSrcLineBytes = pDoc->m_dib.GetReqByteWidth(lSrcWidth * lpSrcBitCount); // 计算图象每行的字节数
///
其中GetDocument()函数是View类的函数,其功能就是提取先前Doc类已经读取好的内容(通过指针直接读取Doc类的内存)而此后的pDoc->m_dib是CDib类,CDib的功能是存储图像信息。