1:画图时有GDI和GDI+混用时,在使用完GDI+的地方要加上OnPrepareDC()函数,不然坐标会一直保持为设备坐标,而不是逻辑极坐标.
2:绘图时闪烁,使用双缓冲绘图技术,要设定
pDC->SetViewportOrg(0, 0);
pDC->SetWindowOrg(0, 0);
pDC->SetMapMode(MM_TEXT);
dcMem.SetViewportOrg(0, 0);
dcMem.SetWindowOrg(0, 0);
dcMem.SetMapMode(MM_TEXT);
不然也会一直是设备坐标.而且OnEraseBkgnd(CDC* pDC)函数一定要返回TRUE.
暂时想到的只有这么多,以后发现问题再及时记录!
/************************************* 2017.03.18日更新 ****************************************/
在有连续的GDI与GDI+ 混用时,最好把GDI+单独提取到另一个函数中,不然坐标会是设备坐标
/************************************* 2017.04.09日更新 ****************************************/
GDI+在画图时要注意释放句柄资源.不然会有内存泄露,导致内存不断增大,但是Debug模式结束程序后,又没有内存泄露的提示.
Graphics g(pDC->m_hDC);
CString strImage = _T("C:\\Users\\layne\\Desktop\\KeyBoard Tools\\Debug\\StaticKeyImage\\MoreColor.png");
BSTR bstr = strImage.AllocSysString();
//Image * i = Image::FromFile(bstr);//使用FromFile需要释放,不然会有内存泄露
Image i(bstr);
SysFreeString(bstr);//转成BSTR类型的字符串后,需要释放,不然内存泄露
Rect r(rectFill.left, rectFill.top, rectFill.Width(), rectFill.Height());
g.DrawImage(&i, r);
//delete i;
//i = NULL;
g.ReleaseHDC(pDC->m_hDC);//需要释放GDI+的句柄不然会有内存泄露
静态函数FromFile、FromHBitmap和FromStream的使用
FromFile主要是将图片文件加载到GDI+对象中,FromHBitmap和FromStream函数则是将内存中的图片数据加载到GDI+对象中。我们平常处理图片加载与格式转换时主要用到两个类:Bitmap类和Image类。Bitmap类继承于Image类,这三个函数它都有。Image类则只有FromFile和FromStream函数。在使用这三个函数时,要注意一下几点。
(1) 对于FromFile、FromHBitmap和FromStream这三个函数,都是静态函数,MSDN对于返回值的说明:This method returns a pointer to the new Bitmap/Image object(在VS中GO到函数的定义出也是能看出来的,函数返回是new出来的对象)。这意味着什么呢?因为返回的是新创建的类的对象,是需要我们使用者来负责销毁的,即对象使用完了后需要我们手动将之delete掉。如果不delete掉,不仅会导致内存泄漏,也会导致GDI句柄泄漏。这点在我们的项目开发中是深有体会的,特别是GDI句柄泄漏使用了专门的工具进行检测的。
(2) 在使用Image::FromFile时,要注意将指定的文件加载到Image对象中后,会将磁盘上对应的文件“锁住”,其他地方如果要同时加载该文件则可能会出问题,这也是我们在开发过程中遇到的问题。我们的处理办法是,不使用Image::FromFile函数,使用Image::FromStream。对于Image::FromStream,我们先将文件读到内存中,然后再将内存中数据倒到流中,然后调用Image::FromStream从流中将图片数据加载到Image对象中。使用Image::FromStream的流程较复杂,使用时要注意,也有一些陷阱,下面我们会谈到。
(3) 对于GDI+提供的函数,对于需要传入字符串的参数,一般均是WCHAR*宽字节类型,所以在调用之前要确保传入字符串是宽字节的。这点和COM接口类似,一般都要传入宽字节的字符串。
GDI资源也要注意释放,不然也会有内存泄露.
GDI对象释放详解:http://blog.csdn.net/qq_23992597/article/details/69856135