MFC中利用GDI+进行双缓冲作图的有关设置
这里只是在遇到实际问题的时候提出的一种解决方法,用以处理闪屏问题。
首先要做的是对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+进行双缓冲作图的有关设置的更多相关文章
- C#-gdi绘图,双缓冲绘图,Paint事件的触发
一. 画面闪烁问题与双缓冲技术 1.1 导致画面闪烁的关键原因分析: 1 绘制窗口由于大小位置状态改变进行重绘操作时 绘图窗口内容或大小每改变一次,都要调用Paint事件进行重绘操作,该操作会使画面 ...
- C#-gdi画图,双缓冲画图,Paint事件的触发---ShinePans
在使用gdi技术画图时,有时会发现图形线条不够流畅,或者在改变窗口大小时会闪烁不断的现象.(Use DoubleBuffer to solve it!) ...
- GDI+学习笔记(九)带插件的排序算法演示器(MFC中的GDI+实例)
带插件的排序算法演示器 请尊重本人的工作成果,转载请留言.并说明转载地址,谢谢. 地址例如以下: http://blog.csdn.net/fukainankai/article/details/27 ...
- c# GDI画图 双缓冲画图分析
双缓冲绘图分析 1.Windows 绘图原理 我们在 Windows 环境下看到各种元素,如菜单.按钮.窗口.图像,从根本上说,都是“画”出来的.这时的屏幕,就相当于一块黑板,而 Windows ...
- WinForm之GDI手动双缓冲技术
private void button1_Click(object sender, EventArgs e) { Bitmap bmp = new Bitmap(this.picturebox.Wid ...
- 在MFC中使用GDI+的一般方法,以VC6.0编译器为例
1.载解压GDI+开发包: 2.正确设置include & lib 目录: 设置如下:VC6.0编译器菜单Tools->Options->Directories中添加inlude ...
- MFC中利用Opencv与C++抓取摄像头进行人脸识别(Mat)
原文:http://blog.csdn.net/mr_curry/article/details/51098311 第一次写博客哈哈,有些小激动,还请各位大神多多包涵~ 最近的项目需要用到人脸识别,作 ...
- MFC中利用CString和Format成员函数将数字格式化输出
str.Format("格式控制字符串”,输出列表): 格式控制字符串包括格式字符串和非格式字符串,用双引号括起来.其中非格式字符串原样输出. 格式字符串是以%开头的字符串:%[标识][输出 ...
- GDI+实现双缓冲绘图方法一
private void Form5_MouseMove(object sender, MouseEventArgs e) { int intOX = rectDrawArea.X; int intO ...
随机推荐
- linux--解决oracle sqlplus 中上下左右backspace不能用
1. 解决不能backspace 方法1: stty erase ^h 在oracle用户下:在用户环境配置文件.bash_profile中加入如下语句 stty erase ^h 方法2:在sec ...
- C++异常 返回错误码
一种比异常终止更灵活的方法是,使用函数的返回值来指出问题.例如,ostream类的get(void)成员ASCII码,但到达文件尾时,将返回特殊值EOF.对hmean()来说,这种方法不管用.任何树脂 ...
- Mybatis——SQL语句构建器类
SQL语句构建器类 问题 Java程序员面对的最痛苦的事情之一就是在Java代码中嵌入SQL语句.这么来做通常是由于SQL语句需要动态来生成-否则可以将它们放到外部文件或者存储过程中.正如你已经看到的 ...
- python搭建简易Web Server
如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等.那么, Python可能帮助你,使用Python可以完成一个简单的内建 HTT ...
- 从CES看2016物联网发展趋势
[导读] 美国时间1月6号,千呼万唤始出来的2016年国际消费电子展(CES2016)在拉斯维加斯正式拉开序幕.三天会展完满落幕,这个被誉为全球消费电子技术风向标的北美最大消费电子展俨然变成了未来智慧 ...
- PHP 允许Ajax跨域访问 (Access-Control-Allow-Origin)
Ajax访问php,报错 php顶部加上即可: header("Access-Control-Allow-Origin: *");
- 【BZOJ2142】礼物 组合数+CRT
[BZOJ2142]礼物 Description 小E从商店中购买了n件礼物,打算送给m个人,其中送给第i个人礼物数量为wi.请你帮忙计算出送礼物的方案数(两个方案被认为是不同的,当且仅当存在某个人在 ...
- awk中的冒泡排序
算法中经典的排序方式,今也用awk来实现下,代码如下: BEGIN { count=} {arrary[count]=$ count++ } END{ ;i>-;i--) { ;j<i;j ...
- oneThink发生错误,获取当前执行的SQL语句!
echo D('AnswerInfoView')->getLastSql();die();
- Linux 安装 MantisBT 详解
https://www.cnblogs.com/qdwyg2013/p/6030157.html 在工作中,选用了MantisBT作为公司的BTS工具.MantisBT的作为一款缺陷跟踪管理系统,有以 ...