[MFC] 界面闪烁若干种解决办法

界面闪烁原因,可以参考这里
总结了工作中使用过的如下几种方法 ,具体原理就不说了,如果有相应的UI开发经验 应该很容易懂,不懂的话根据我提供的关键字自己搜索一下具体原理。

1、双缓冲
这个是最基本的  不详说了 可自己搜索相关信息

2、OnEraseBkgnd { return TRUE; }
这一种也没什么好说的

3、对窗口设置WS_CLIPCHILDREN和WS_CLIPSIBLINGS风格 
至于为什么可以解决闪烁 可MSDN上查看这两种属性的具体信息

4、重绘窗口时 尽量用InvalidateRect 不要用Invalidate

 ----------------以上几种应该是大部分人都接触过的 以下几种方法可能稍微用的少一些 ----------------

5、SetRedraw(FALSE)
应用举例:如果在短时间内 对一个CListCtrl有大量的增删改操作,
可在操作前调用一次m_ListCtrl.SetRedraw(FALSE) 避免在操作过程中列表框刷新
操作结束后 调用一次m_ListCtrl.SetRedraw(TRUE) 恢复刷新
千万注意 有一个类似的API LockWindowUpdate 该API和SetRedraw有区别 不但不能解决闪烁 反而引起闪烁。原因可以参考http://bbs.csdn.net/topics/310205465。调用这个API后,在窗口锁定期间会堆积重绘消息,当解锁时再分发堆积的消息,这样反而会造成窗口闪烁。

6、BeginDeferWindowPos(),DeferWindowPos(),EndDeferWindowPos()

应用举例:在主窗口的OnSize中 调整所有子窗口的新位置 不要使用MoveWindow或SetWindowPos移动子窗口 否则闪烁

7、resize主窗口时,以虚框代替重绘,即“not  repaint  while  draging”
场景:resize主窗口时 如果在OnSize中实时更新子窗口的UI布局 界面会有闪烁 为了避免拖动中频繁闪烁 可以在拖动中不实际更新主窗口的大小
而以一个虚拟的矩形框代表主窗口的新位置(很多软件都有这个效果)
具体技术说明 参考API:SystemParametersInfo
代码如下:

    void CMyDlg::OnNcLButtonDown(UINT nHitTest, CPoint point)
    {    
        // 1,查询当前系统“拖动显示窗口内容”设置
        SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, &m_bDragFullWindow, NULL);
       
        // 2,如果需要修改设置,则在每次进入CDialog::OnNcLButtonDown默认处理之前修改
        if(m_bDragFullWindow)
             SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, FALSE, NULL, NULL);

        // 3,默认处理,系统会自动绘制虚框
        CDialog::OnNcLButtonDown(nHitTest, point); 
       
        // 4,默认处理完毕后,还原系统设置
        if(m_bDragFullWindow)
             SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, TRUE, NULL, NULL);
    }
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 开源MFC界面换肤文件是一种可以自定义MFC界面外观的文件。MFC(Microsoft Foundation Class)是微软公司开发的一套用于Windows应用程序的类库,它提供了许多界面组件及辅助工具,用于快速开发Windows应用程序。 开源MFC界面换肤文件是由开源社区或个人开发者提供的允许用户自由使用、修改和分发的文件。它包含了改变MFC界面外观的相关资源文件,如图标、背景、按钮样式等。用户可以根据自己的需求和喜好,选择合适的皮肤文件来自定义MFC界面,使其符合自己的视觉风格。 使用开源MFC界面换肤文件可以带来以下几个优点: 1. 外观定制化:用户可以自由选择合适的皮肤文件,将MFC界面外观与自己的品牌形象或个人喜好相匹配,提升用户体验。 2. 界面变换:通过更换皮肤文件,可以随时改变MFC界面的外观,给用户带来新鲜感和活力,提高用户的工作效率和兴趣。 3. 提高可扩展性:开源MFC界面换肤文件可以作为一个外部组件,可以与其他功能模块和插件相集成,提供更丰富的界面定制化选项。 4. 社区支持:由于是开源文件,用户可以与开源社区互动,分享和获取更多的皮肤文件和改进建议,从而得到更好的支持和协作。 总之,开源MFC界面换肤文件为MFC开发者提供了更多的界面外观定制化选项,可以根据自己的需求和喜好来优化和创新MFC界面,提升用户体验和工作效率。同时,也在开源社区中形成了一种互动和分享的开发文化。 ### 回答2: 开源MFC界面换肤文件是一种允许用户自定义界面外观和主题的文件。它可以让开发人员在MFC应用程序中实现界面的换肤功能。 开源的换肤文件通常是由MFC开发者共享的、可自由使用和修改的代码。它们通过使用不同的皮肤和主题文件,可以改变应用程序的外观,包括按钮样式、颜色、字体等。 在使用开源的换肤文件时,我们需要将相应的文件引入到MFC项目中,并根据自己的需求进行配置和定制。一般来说,开源的换肤文件会提供一些示例代码和文档,以帮助开发者快速上手。 通过使用开源的换肤文件,我们可以实现应用程序在不同操作系统和平台上具有一致的外观,提升用户体验。同时,开源的换肤文件也为开发者提供了一个更加灵活和易于维护的界面定制方案。 开源的换肤文件在MFC开发中的应用十分广泛,因为它们可以大大减少编写自定义界面代码的工作量,提高开发效率。此外,通过开源共享,开发者还可以从其他人的经验和技巧中获取灵感和帮助,更好地应对界面换肤的挑战。 总结而言,开源MFC界面换肤文件是一种允许用户自定义界面外观和主题的开发工具。通过使用开源的换肤文件,我们可以轻松地实现界面的换肤功能,提高应用程序的用户体验和开发效率。 ### 回答3: 开源的MFC界面换肤文件是一种用于改变MFC应用程序界面样式的文件,它可以实现界面的个性化定制和美化。这种文件通常使用XML或INI等格式保存,其中包含了界面元素的布局信息、颜色样式、图标等。开源的MFC界面换肤文件具有以下几个特点: 首先,开源的MFC界面换肤文件提供了丰富多样的主题和皮肤选择,用户可以根据自己的喜好和需求来选择适合的皮肤文件,使应用程序界面焕然一新。 其次,开源的MFC界面换肤文件具有易于使用和集成的特点。用户只需要将皮肤文件导入应用程序中,并在代码中调用相应的接口进行界面切换,便可实现换肤功能。 此外,开源的MFC界面换肤文件还提供了扩展性和自定义性。用户可以根据自己的需求对皮肤文件进行修改和定制,添加自定义的界面元素和效果,使应用程序界面更加个性化。 最后,开源的MFC界面换肤文件通常具有良好的兼容性和稳定性。它们经过多次测试和优化,可以在各种Windows操作系统和MFC版本下正常运行,不会对应用程序的性能和稳定性产生负面影响。 总之,开源的MFC界面换肤文件为开发者提供了一种简单、灵活和美观的界面定制方案,可以大大提升应用程序的用户体验和吸引力。同时,开源的特性还使得这些文件易于集成和定制,满足了不同用户的多样化需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值