这里只是在遇到实际问题的时候提出的一种解决方法,用以处理闪屏问题。

  首先要做的是对GDI的一个设置问题:

  在应用程序类中添加一个保护权限数据成员

 class C...App:
{...
private:
ULONG_PTR m_gdiplusToken;
}

  在相应的cpp文件中,添加头文件。之所以把头文件放到cpp文件中是为了防止过多的引用

#include <Gidplus.h>

  然后再应用程序类的初始函数和退出函数进行修改:

 BOOL C...App::InitInstance()
{
CWinAppEx::InitInstance(); //GDI初始化
Gdiplus::GdiplusStartupInput StartupInput;
GdiplusStartup(&m_gdiplusToken, &StartupInput, NULL);
...
}
 int C...App::ExitInstance()
{
//GDI销毁
Gdiplus::GdiplusShutdown(m_gdiplusToken);
...
}

  这样便对GDI+的初始化进行设置完毕,然后修改View类中相关代码,看是否可以达到双缓冲效果。

  设计思路是做两个graphics,一个用来显示,一个用来作图,最后要做的是将缓存区中的图贴到前台来,就可以有效地处理闪屏问题。

 void C...View::OnDraw(CDC* pDC)
{
C...Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return; CRect client_rect;
GetClientRect(client_rect);
Graphics graphics(pDC->m_hDC);
Bitmap bitmap(client_rect.Width(), client_rect.Height(), &graphics);
Graphics buffer_graphics(&bitmap);
SolidBrush BKbrush(Color::White); //将背景刷白
buffer_graphics.FillRectangle(&BKbrush, , , client_rect.Width(), client_rect.Height()); //测试
SolidBrush font_brush(Color::Black);
FontFamily font_family(L"宋体");
Gdiplus::Font font(&font_family, , Gdiplus::FontStyleRegular, Gdiplus::UnitPixel);
PointF pointF(REAL(client_rect.Width() / ), REAL(client_rect.Height() / ));
CString channel_name;
channel_name.Format(_T("Test"));
graphics.DrawString(channel_name, -, &font, pointF, &font_brush); graphics.DrawImage(&bitmap, client_rect.left, client_rect.top, client_rect.right, client_rect.bottom); //将bitmap拷贝到前台 }

参考:http://blog.csdn.net/clever101/

MFC中利用GDI+进行双缓冲作图的有关设置的更多相关文章

  1. C#-gdi绘图,双缓冲绘图,Paint事件的触发

    一. 画面闪烁问题与双缓冲技术 1.1 导致画面闪烁的关键原因分析: 1  绘制窗口由于大小位置状态改变进行重绘操作时 绘图窗口内容或大小每改变一次,都要调用Paint事件进行重绘操作,该操作会使画面 ...

  2. C#-gdi画图,双缓冲画图,Paint事件的触发---ShinePans

    在使用gdi技术画图时,有时会发现图形线条不够流畅,或者在改变窗口大小时会闪烁不断的现象.(Use DoubleBuffer to solve it!)                         ...

  3. GDI+学习笔记(九)带插件的排序算法演示器(MFC中的GDI+实例)

    带插件的排序算法演示器 请尊重本人的工作成果,转载请留言.并说明转载地址,谢谢. 地址例如以下: http://blog.csdn.net/fukainankai/article/details/27 ...

  4. c# GDI画图 双缓冲画图分析

    双缓冲绘图分析  1.Windows 绘图原理  我们在 Windows 环境下看到各种元素,如菜单.按钮.窗口.图像,从根本上说,都是“画”出来的.这时的屏幕,就相当于一块黑板,而 Windows ...

  5. WinForm之GDI手动双缓冲技术

    private void button1_Click(object sender, EventArgs e) { Bitmap bmp = new Bitmap(this.picturebox.Wid ...

  6. 在MFC中使用GDI+的一般方法,以VC6.0编译器为例

    1.载解压GDI+开发包: 2.正确设置include & lib 目录: 设置如下:VC6.0编译器菜单Tools->Options->Directories中添加inlude ...

  7. MFC中利用Opencv与C++抓取摄像头进行人脸识别(Mat)

    原文:http://blog.csdn.net/mr_curry/article/details/51098311 第一次写博客哈哈,有些小激动,还请各位大神多多包涵~ 最近的项目需要用到人脸识别,作 ...

  8. MFC中利用CString和Format成员函数将数字格式化输出

    str.Format("格式控制字符串”,输出列表): 格式控制字符串包括格式字符串和非格式字符串,用双引号括起来.其中非格式字符串原样输出. 格式字符串是以%开头的字符串:%[标识][输出 ...

  9. GDI+实现双缓冲绘图方法一

    private void Form5_MouseMove(object sender, MouseEventArgs e) { int intOX = rectDrawArea.X; int intO ...

随机推荐

  1. Python 数据类型:数值

    数值类型分为:整型 .长整型 .浮点型 .复数型 整型示例: In [1]: a = 100 # 整型也就是整数类型 In [2]: type(a) # 整型的英文缩写为int Out[2]: int ...

  2. NUC131演示如何通过PWM触发ADC。

    今天我来讲讲PWM触发ADC的例程 /**************************************************************************** * @f ...

  3. c++11——type_traits 类型萃取

    一. c++ traits traits是c++模板编程中使用的一种技术,主要功能:     把功能相同而参数不同的函数抽象出来,通过traits将不同的参数的相同属性提取出来,在函数中利用这些用tr ...

  4. 窗口大小改变绑定resize事件

    当为窗口绑定resize事件时,大部分浏览器会在每改变一个像素就触发一次resize事件.这严重影响了网站的性能. 解决方案是:利用settimeout方法为事件发触发的方法设置延迟执行的时间. 实现 ...

  5. jquery类似方法的比较(三)

    属性选择器 1.$("div[class|='test']")可以选择 class为test的div 和 class以“test-”开头的div. 2.$("div[cl ...

  6. JZOJ.5335【NOIP2017模拟8.24】早苗

    Description

  7. 微信小游戏 小程序与小游戏获取用户信息接口调整 wx.createUserInfoButton

    参考: 小程序•小故事(6)——微信登录能力优化 小程序•小故事(4)——获取用户信息 本篇主要是讲微信getUserInfo接口不再出现授权弹框 那么原来getUserInfo是怎么样?修改之后又是 ...

  8. 深入理解javascript原型和闭包 摘要

    一切(引用类型)都是对象,对象是属性的集合 对象都是通过函数创建的 隐式原型 Instanceof的判断队则是:沿着A的__proto__这条线来找,同时沿着B的prototype这条线来找,如果两条 ...

  9. c# Winform间的页面传值

    Form2 public partial class Form2 : Form { public string str; public Form2() { InitializeComponent(); ...

  10. log4net类库配置、WebService配置

    一.类库配置 结构如下图 1.LogUtility类 public class LogUtility { private static readonly log4net.ILog log = log4 ...