MFC简单图像编程

来源:互联网 发布:威海 烟台 知乎 编辑:程序博客网 时间:2024/06/03 02:28
这段时间开始看孙鑫老师的《VC++深入详解》,看了之后发现,自已以前对其中的很多函数只有一个很模糊的概念,很多时候需要某个功能的时候就将以前的代码拷过来,没有自己去编写,其实就是没有真正理解。希望以后能够慢慢对MFC有一个更深入的学习、了解。在这里把在书中看的一些新内容分享下,有些内容是自己理解的,可能会有些错误,望高手们指点指点。1、CWnd类定义了一个HWND类型的成员变量m_hWnd,用于保存当前窗口的句柄,并且该成员变量具有public 类型的访问权限。CDC 类提供一个数据成员m_hDC,用来保存与CDC类相关的DC句柄。获得窗口的设备描述表HDC hdc=::GetDC(m_hWnd);CDC * pDC = GetDC();Windows编程中,在函数前面加上两个冒号,表明它们是全局SDK函数。加冒号的可以指定(窗口……),没加的话只能获得当前。2、在实际编程中,通常可以采用猜测的方法,如想获得父窗口的指针,我们可以猜测其函数名是不是”Get”加上”Parent”,然后去MSDN查找一下是否确实存在。3、删除某个消息响应函数时要小必,一定要确保这几处相关代码均被删除。最好不要直接用手工删除源代码中的函数的定义。4、CPen pen(PS_SOLID,1,RGB(255,0,0));CPen* pOldPen = dc.SelectObject(&pen); // SelectObject()返回的不是pen的指针,而是pen之前//的画笔指针dc.SelectObject(pOldPen);// SelectObject()把先前的GDI对象选入设备描述表,恢复到先前状态。5、画虚线时,画笔的宽度要小于等于一时,虚线才能画出。6、无论采用什么样的操作,程序代码都是在内存中运行的,只有在内存中占有一席之地,我们才能够访问它,如果一个成员函数或成员变量还未在同存中产生,结果是无法访问它。类中的静态成员函数和静态成员变量属于类本身,在类加载的时候,即为它们分配了空间,所以可以通过类名::函数名或类名:变量名来访问。7、图像伸缩函数: BOOL StretchBlt(int x,int y,int nWidth,int nHeight,CDC* pSrcDC,int xSrc,in tySrc,DWORD dwRop)。这个函数可以在内存中拷贝指定区域的图像输出到屏幕上的指定位置,这样就可以把导入的图片进行分块处理。同时这也可以用于对话框背景图片的导入。这个函数在图片处理上应该是很有用处的。8、双缓冲技术——解决屏幕闪烁现象:当我们改变图像的某些部位时,有时不能只单纯的在原位置上重画,那样就会造成重叠,而如果我们把整体重绘的时候,窗口在响应WM_PAINT消息的时候要进行复杂的图形处理,那么窗口由于过频的刷新而引起闪烁现象。但如果我们利用双缓冲的方法就能很好的解决这一问题,具体方法就是先在内存中把要绘的图形画好,然后把它整体拷贝到屏幕。不过这其中还要注意一个问题,在BOOL CMYView::OnEraseBkgnd(CDC* pDC){ return CView::OnEraseBkgnd(pDC); } 是调用父类的OnEraseBkgnd函数,我们屏蔽此调用,只须直接return TRUE;即可。
原创粉丝点击