mfc中如何解决屏幕闪烁

问题描述

mfc中如何解决屏幕闪烁

void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here

CRect rect;
GetClientRect(&rect);//获取客户区大小

//画背景  棋盘等
static bool i=0;
if(!i)
{

    bmpbegin.LoadBitmap(IDB_BEGIN);
    begindc.CreateCompatibleDC(pDC);
    begindc.SelectObject(&bmpbegin);

    bmpend.LoadBitmap(IDB_END);
    enddc.CreateCompatibleDC(pDC);
    enddc.SelectObject(&bmpend);

    bmpback.LoadBitmap(IDB_BACK);
    backdc.CreateCompatibleDC(pDC);
    backdc.SelectObject(&bmpback);
    bmpback.GetBitmap(&backbmp);
    i=1;
}

pDC>StretchBlt(20,20,rect.Width()-130,rect.Height()-30,&backdc,0,0,backbmp.bmWidth,backbmp.bmHeight,SRCCOPY);
pDC->BitBlt(rect.Width()-100,70,100,50,&begindc,0,0,SRCCOPY);
pDC->BitBlt(rect.Width()-100,150,100,50,&enddc,0,0,SRCCOPY);

//棋盘坐标赋值
/*************************************************************************/
float mapw,maph;//格子长度
mapw =((float)rect.Width()-130.0)/14.0;
maph =((float)rect.Height()-30.0)/14.0;
int mapi,mapj;
for(mapi=0;mapi<15;mapi++)
{
    for(mapj=0;mapj<15;mapj++)
    {
        (mappoint[mapi][mapj]).x=20+mapi*mapw;
        (mappoint[mapi][mapj]).y=20+mapj*maph;
    }
}
/*************************************************************************/

//画棋子
CBrush backbrush(RGB(0,0,0));
CBrush whitebrush(RGB(255,255,255));
for(mapi=0;mapi<15;mapi++)
{
    for(mapj=0;mapj<15;mapj++)
    {
        if(backmap[mapi][mapj]||whitemap[mapi][mapj])
        {
            CPoint p1,p2;
            p1.x=mappoint[mapi][mapj].x-maph/2;
            p1.y=mappoint[mapi][mapj].y-maph/2;
            p2.x=mappoint[mapi][mapj].x+maph/2;
            p2.y=mappoint[mapi][mapj].y+maph/2;
            if(backmap[mapi][mapj])
                pDC->SelectObject(backbrush);
            if(whitemap[mapi][mapj])
                pDC->SelectObject(whitebrush);
            pDC->Ellipse(CRect(p1,p2));

        }
    }
}

if(1==chess%2)
    str="白棋走";
if(0==chess%2)
    str="黑棋走";
pDC->TextOut(rect.Width()-80,20,str);
str.Format("棋子数:%d",chess-1);
pDC->TextOut(rect.Width()-80,40,str);

}

解决方案

解决屏幕闪烁问题,要用双缓冲技术,强调一下gdi+不支持双缓冲,gdi才支持。就是先再内存中画,然后再一次性画到屏幕上面,这样就避免屏幕设备不断出现白色屏幕的闪烁问题。

时间: 2024-09-12 10:11:08

mfc中如何解决屏幕闪烁的相关文章

苹果承诺为iMac用户解决屏幕闪烁和偏黄问题

北京时间2月2日下午消息,据国外媒体报道,苹果今天宣布,由于收到"少数"用户的投诉,该公司将为27英寸iMac用户解决屏幕闪烁和颜色偏黄的问题.苹果还表示,将加大这一型号的供货量,以满足需求. 苹果发言人科林·史密斯(Colin Smith)说:"对于液晶显示器而言,偏色是正常现象.尽管如此,任何担心自己显示器颜色偏黄的iMac用户都可以联系Apple Care 客服."他还表示,苹果昨天发布了一款软件更新,用来解决部分用户报告的间歇性屏幕闪烁问题. 苹果去年10月

详解Android中Runtime解决屏幕旋转问题(推荐)_Android

前言 大家或许在iOS程序开发中经常遇到屏幕旋转问题,比如说希望指定的页面进行不同的屏幕旋转,但由于系统提供的方法是导航控制器的全局方法,无法随意的达到这种需求.一般的解决方案是继承UINavrgationViewController,重写该类的相关方法,这样虽然也能解决问题,但是在重写的过程中至少产生两个多余的文件和不少的代码,这显然不是我们想要的.下面就使用一种较底层的方法解决这个问题. 基本原理 动态的改变UINavrgationViewController的全局方法,将我们自己重写的su

双缓冲解决VC++绘图时屏幕闪烁_C 语言

通常来说程序根据需要调用Invalidate(FALSE)使窗口客户区无效引起重绘,然后在窗口OnPaint函数(基于文档视图的程序则是OnDraw)中进行稳定绘图就行了.但是,我们在OnPaint中进行多重绘制(画背景.棋盘.棋子等),前后绘制的反差造成了闪烁现象.以前知道Java中解决屏幕闪烁问题是用双缓冲的方法,现在发现在vc++中也是可以这么做的.简单来说,双缓冲就是先把需要绘制的东西全部一口气画在内存中,最后把内存中的数据搬到屏幕上显示. 最近做中国象棋,绘制界面时遇到些问题,绘图过程

滑块 闪烁-MFC中滑块拖动闪烁的问题

问题描述 MFC中滑块拖动闪烁的问题 void CZdview::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (*pScrollBar == m_slider1) { int pos11 = m_slider1.GetPos(); SetDlgItemInt(IDC_EDIT1,pos11); m_slider1.SetPos(pos11); CMain

Android仿微信清理内存图表动画(解决surfaceView屏幕闪烁问题)demo实例详解_Android

最近接了一个项目其中有功能要实现一个清理内存,要求和微信的效果一样.于是想到用surfaceView而不是继承view.下面小编给大家解析下实现思路. surfaceView是为了解决频繁绘制动画产生了闪烁,而采用了双缓冲机制,即A.B两个缓冲轮流显示在画布上,同时,使用不当,同样容易产生闪烁,这是由于A.B中有一个缓冲没有改变. 在我写这个view的时候就遇到了这个问题,研究了好久终于解决. 首先说一下思路: 微信清理缓存的动画是: 一个圆环不停的转动,同时中间有文字显示-->加载完成后,出现

iphone6plus屏幕闪烁灰条是怎么回事 苹果6plus屏幕闪烁灰条解决办法

iphone6plus屏幕闪烁灰条这种情况相信很多用户都出现这个问题,不知道怎么解决,因此就让小编给大家讲讲解决办法吧,想知道的一起来看看吧.   苹果6plus屏幕闪烁灰条解决办法 iPhone6这一代产品给用户带来了不少麻烦,起初新设备上市的时候,弯折门让很多用户不得不对设备多加以注意,后来又有一小部分iPhone6Plus设备的iSight摄像头中存在一个可能因故障而导致照片模糊不清的组件,好在出现这些问题之后苹果公司都及时采取行动,要么为用户更换全新的设备,要么免费更换iSight摄像头

电脑屏幕闪烁、抖动的原因与解决办法

一.调整显示器的显示频率. 当我们显示器显示频率过低时候最容易出现电脑屏幕闪烁与电脑屏幕抖动.我们可以检查下自己电脑显示器显示频率:鼠标右键点击电脑桌面空白处然后选择[属性-设置-高级]选项,如图所示: 然后在切换到[监视器]选项卡,如图所示:如果你的显示器显示频率是60赫兹 或低于75赫兹,那么就有可能会出现电脑电脑屏幕闪烁与电脑屏幕抖动,那么我们就把显示频率提高,一般在75-85赫兹.也不是越高越好,太高的话显示器寿命会减短,或者超频的话显示器会黑屏,照成不能显示.部分笔记本电脑只有60HZ

更新MFC中的视图,跟踪.NET Framework中的事件

本文配套源码 如何更新MFC中的视图? 如何跟踪.NET Framework 中的事件? 我在 MDI 程序中打算通过 CMainFrame 中的定时器事件来更新所有的子窗口. 视图用于显示许多图表.用如下的代码只能更新当前活动窗口: GetActiveWindow()->GetActiveView()->GetDocument() 是否有其它的方法从 CMDIFrame 类中获得所有的子窗口或者所有的文档? Makarand 你的情况并不罕见.许多采集实时数据的程序需要定时更新屏幕.即使你的

电脑屏幕闪烁怎么办

开机却出现电脑屏幕闪烁,电脑屏幕抖动!看屏幕上的字很费眼,小编把会导致电脑屏幕闪烁,电脑屏幕抖动的原因也总结下. 电脑屏幕闪烁怎么办?出现这种情况,常见的有四类原因: 1接触不良和信号干扰类; 2屏幕刷新频率太低和显卡驱动; 3劣质电源; 4硬件问题.电脑屏幕下方闪烁.黑屏.电脑屏幕抖动,除了会让你感觉眼睛很快就疲劳,时间长了会给使用者带来眼疾以外.如果不及时解决会对你的系统造成损坏,因为可能是系统本身隐藏的问题反映在屏幕抖动的现象上.其实有很多原因可以导致屏幕出现抖动的现象,实际上解决起来也不