如何解决vc++绘图出现屏幕闪烁的问题

如何解决vc++绘图出现屏幕闪烁的问题,第1张

相信很多人在做图形界面开发时,常常会遇到屏幕闪烁的情况,当然我也不例外。前段时间用vc++做了一个小游戏——五子棋,前期阶段主要做的是逻辑层面的编码,没有太注意屏幕闪烁的情况,到了后来实现悔棋功能时需要擦除已下过的棋子进行重绘,屏幕闪烁厉害,急需解决——有哪个玩家愿意玩屏幕老闪烁的游戏? 通常来说程序根据需要调用Invalidate(FALSE)使窗口客户区无效引起重绘,然后在窗口OnPaint函数(基于文档视图的程序则是OnDraw)中进行稳定绘图就行了。但是,我们在OnPaint中进行多重绘制(画背景、棋盘、棋子等),前后绘制的反差造成了闪烁现象。以前知道Java中解决屏幕闪烁问题是用双缓冲的方法,现在发现在vc++中也是可以这么做的。简单来锋蚂册说,双缓冲就是先把需要绘银宏制的东西全部一口气画在内存中,最后把内存中的数据搬到屏幕上显示。

下面是双缓冲的代码实现例子:

点击(此处)折叠或打开

void C****Dlg::OnPaint()

{

if (IsIconic())

{

//......

}

else

{

//CDialog::OnPaint()//不要调用这个

CPaintDC dc(this)//对话框的dc//通常CPaintDC用来响应WM_PAINT消息。

//CPaintDC是从CDC派生出来的:在构造时自动调用CWnd::BeginPaint,析构时调用CWnd::EndPaint。

RECT rect// 客户区矩形

GetClientRect(&rect)

// 使用双缓冲避免屏幕刷新时闪烁

CDC dcMem// 内存dc

CBitmap bmpMem// 位图

dcMem.CreateCompatibleDC(NULL)// 创建兼容dc

bmpMem.CreateCompatibleBitmap(&dc, rect.right-rect.left, rect.bottom-rect.top)//创建跟客户区域大小一样的(空)位图

// 把位图选到设备上下文环境中

CBitmap *pOld = dcMem.SelectObject(&bmpMem)

//dcMem.FillSolidRect(&rect, RGB(255,255,255))

// 在此处将绘制内容全画到dcMem内存中,(即把之前使用CPaintDC绘制的dc换成dcMem即可)

DrawTable(dcMem)//画棋盘

DrawChesses(dcMem)// 画棋子

//......

// 至此,内存中绘图完毕

// 从内存拷贝到设备dc

dc.BitBlt(0, 0, rect.right - rect.left, rect.bottom - rect.top, &dcMem, 0, 0, SRCCOPY)

dc.SelectObject(pOld)

// 释放资源

bmpMem.DeleteObject()

dcMem.DeleteDC()

}

}

PS:屏幕闪烁问题虽然得到解决了,但是窗口上的按钮却还会闪(可能是因为使用图片按钮的缘故才那么明显),当然这个我也是无法容忍的。

默认情况窗口风格没有设置了WS_CLIPCHILDREN属性,所以父窗口刷新时子窗口也跟着刷新,于是产生按钮闪烁现象,于是我在游戏开始时给窗口加上WS_CLIPCHILDREN属性:

ModifyStyle(0, WS_CLIPCHILDREN)

这样Invalidate 时按钮就不会闪烁了。

如果窗口加上了WS_CLIPCHILDREN属性,当需要切换背景图片时,按钮因为没有刷新所以会被盖住,直到(鼠标移到按钮上)重绘时才会显示出来。

解决方法:

1)添加BOOL类型的成员变量bgroundChanged,初始化为FALSE;

2)在切换背景图片前调用ModifyStyle(WS_CLIPCHILDREN, 0)去掉物友WS_CLIPCHILDREN属性,并把bgroundChanged设置为TRUE;

3)在OnPaint中最后增加

if (TRUE == bgroundChanged)

{

bgroundChg = FALSE

ModifyStyle(0, WS_CLIPCHILDREN)

}

苹果14进小程序闪屏原因如下。

1、iPhone手机运行软件存在兼容性问题。

2、iPhone手机所处环境有强电磁干扰源。

3、手机的电池电量过低。微信打开闪屏怎么回事?

如果手机屏幕闪烁,建议您:

1。检查开发人员选项中的“显示屏幕更新”功能是否已启用:设置-开发人员选项-显示屏幕更新-关闭(某些机器开发人员选项是隐藏的,如果未激活,则不需要检查)。

2. 关闭并重新启动机器并观察。

3. 如果手机能正常使用,建议检查机器系统是否有新版本,并尝试升级系统。

4. 如果无效,请备份手机中的数据(通讯录、短信、图片等),然后恢复出厂设置。如果手机无法正常工作或以上 *** 作后问题仍然存在,建议您携带购货发票、保修卡和机器到当地售后服务中心请专业工程师帮您检测。

微信小程序打开会闪退什么原因?

应用程序回闪的原因如下:

1。应用程序本身的漏洞:在开发的应用程序代码中存在缺陷,导致大多数设备在运行程序时出现回闪。这种情况需要开发商来解决。

2. 不支持系统固件版本和系统配置(CPU、ram等)。这种情况表明,一些设备可以正常运行程序,而其他设备将闪回。解决方法如下:1。下载并安装PP助手。2将数据电缆连接到计算机并打开PP assistant。单击“3。“正品”在左栏。4然后单击右上角的“修复d出窗口”按钮。5等待修理完成。

如何修复微信小程序闪退问题?

首先,点键睁击移动桌面上的微信。

2]]然后单击屏幕右下角的“我”。

3]],然后单击设置。

4]],然后单击“帮助和反馈”。

5]]然后单击屏幕右上角的扳手图标。

6]],然后单击“修复”。

7]],然后单击小程序。

8]最后,单击“确定”。

打开微信小程序会自动闪退,我什么也没干啊?

1. 缓存垃圾过多,通常在使用软件的过程中,会产生一些垃圾文件,如果长时间不清理会导致手机卡越来越多,也会出现倒叙的情况。

2. 如果运行的程序太多,如果不设置,很多软件会自行运行,手机后台程序太多会造成内存不足,导致应用程序闪回。如果是软件闪回,可以先清理内存,然后再试一次。

3. 部分手机杀毒软件存在恶意代码,会被杀毒软件截获,无法正常进入。我们应该通过绿色下载平台或软件商店下载高安全系数的游戏。

4. 应用程序版本问题如果应用程序版本较低,则会导致应用程序软件不兼容并引起闪回。如果版本太旧,请将其更新为新版本。

5. 网络速度问题,有些软件需要一个稳定的网络,采用2G/3G网络,这就更容易引起闪回。建议使用WiFi玩得更好。

6. 缺少数据包。一些大型游戏需要数据包才能运行。因此,您需要先安装该软件包,然后才能使用它。

7. 如果系统版本太低,软件将无法支持它,因此它将闪回。

8. 分辨率不兼容。有些软件对手机稿仔岁的分辨率有一定的要求。如果手机的分辨率不兼容,一些软件容易出现闪回或其他错误。以上就是小编向大家介绍微信小程序为什么会闪回的原因。使用微信小程序时,一定要了解闪回的原因,并针对原因采取正确的 *** 作方法,才能正常使用微信小程序。

怎么进入微信小程序以及怎么使用?

该应用程序有两个入口,一个来自发现页面,这是该应用程序的官方入口,另一个来自聊天列表页面。

1. 发现页面:切换到发现页面,可以看到一个小程序的选项。点击【小程序】进入,可以看到最近使用的小程序、新增的小程序和附近的小程序。页面顶部有一个搜索栏,你可以搜索你想添加的小程序。

2. 聊天列表页面:切换到聊天页面,然后下拉页面查看最近使用和添加的小程序。

打开小程序,右上角有两个图标,点击圆图标退出小程序,点击三点图标添加小程序,删除小程序,转发小程序,设置浮动窗口。

除了上述添加小程序的搜索方法外,用户还可以扫描代码添加小程序。但是,添加小程序可以不用添加就可以使用,常用的小程序添加后使用会更方便。

我们可以简单地将这个小程序理解为一个轻量级应用程序。打开小戚源程序后,使用方法与app类似。具体功能取决于小程序的开发。与应用程序不同,应用程序更轻、更简洁,不需要下载。用户可以像转发图片一样与微信好友分享应用程序。目前微信应用只支持微信好友间的相互转发,不能在微信应用外共享。

微信应用种类丰富,涵盖电子商务、娱乐、社交、生活服务等领域,极大的方便了我们的生活。

求助:打开微信小程序之后会闪退出来?

原因是小程序存在漏洞或优化不到位,触发微信应用内存保护机制,强制退出。

微信小程序的缺点在哪?

微信小程序闪退修复 微信小程序屏幕闪烁 小米手机微信小程序总是闪

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任。如有侵权/违法内容,本站将立刻删除。

微信小程使用计时器赋值闪烁修改方法。

1、开始定位:可能是倒计时写的有问题,因为不断的对倒计时的时间答首桥进行的赋值,停的赋值使得页面闪烁,每次赋值前清猛没有清空定时器(这时忽略了一个很重要的问题,是滑动的时候才有闪烁和抖动问题),所以一直纠结在这个问题上,不断的调整定时器芹弯的写法。

2、考虑到是不是页面滑动的问题,在谷歌的时候使用微信小程序、倒计时、滑动等关键词,搜索出的主要解决方案都是修改页面的配置,修改页面事件,均无效果,并不是方法的问题,根本上是问题定位不准确。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8278481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存