老问题:MFC 大量MoveWindow移动控件导致界面闪烁的问题

marslycan marslycan 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
封装了一个窗口类class CDynamicFilterSettingFrame : public CWnd{};
主要功能如下图,每次点击+-按钮对应的增加删除一组按钮,考虑到插入的操作,因此在刷新时有大量的MoveWidow来改变控件位置

实际操作时,发现会有界面闪烁现象产生,以前做绘图我知道通过双缓冲来解决绘图闪烁,但是这个动态创建控件....Emmm...抓狂完全没方向...目前我是通过设置SetRedraw()(用这个方式减缓了闪烁现象,但是还是有):

BOOL CDynamicFilterSettingFrame::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return TRUE;
//return CWnd::OnEraseBkgnd(pDC);
}
void CDynamicFilterSettingFrame::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Do not call CWnd::OnPaint() for painting messages
dc.SetBkMode(TRANSPARENT); //设置背景透明
dc.FillSolidRect(0, 0, m_nViewWidth, m_nViewHeight, RGB(240, 240, 240));
}
void CDynamicFilterSettingFrame::CreateDynamicCtrl()
{
SetRedraw(FALSE);

//LockWindowUpdate();
CreateAddButton();
CreateReduceButton();

CreateLeftBraceRadiobutton();
CreateRightBraceRadiobutton();

CreateLeftBraceStatic(); // 左括号静态文本
CreateRightBraceStatic(); // 右括号静态文本
CreateColNameCombox(); // 字段选择Combox
CreateOperatorCombox(); // 运算符选择Combox
CreateValueAEdit(); // 值A 编辑框
CreateValueBEdit(); // 值A 编辑框
CreateLogicalConnectorCombox(); // 逻辑连接符选择Combox


UpdateVScroll();
SetRedraw(TRUE);
//
// CRect rect;
// GetClientRect(&rect);
this->RedrawWindow(NULL, NULL, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);
}

完全混乱的逻辑。。。求大神指点方向
...全文

相关推荐

MsChart实现无闪烁动态曲线(MFC)

实现了无闪烁的动态曲线 对于无闪烁刷新的实现类似于一般MFC画图中创建双缓冲画图避免屏幕闪烁的方法

lovebabyjing520

MFC对话框动态缩放与控件自适应布局:从原理到工程实现

在Windows桌面应用开发中,用户界面(UI)的响应式与自适应能力是衡量软件专业度与用户体验的关键指标。其核心原理在于处理窗口尺寸变化(WM_SIZE消息)时,动态计算并调整子控件的位置与大小。现代UI框架通常内置了强大的布局管理器,但在经典的MFC框架中,开发者需要手动实现这一机制,这恰恰是深入理解Windows GUI消息循环与坐标空间转换的绝佳实践。通过封装一个轻量级的布局管理器(如CLayoutManager类),利用锚定(Anchoring)策略和比例关系计算,可以高效、灵活地控制控件的拉伸与停

weixin_30553777

MFC CTabSheet控件原理、集成与现代化改造实战指南

在Windows桌面开发领域,控件是构建用户界面的基础单元。MFC(Microsoft Foundation Classes)作为经典的C++框架,其标准控件库提供了丰富的界面元素。其中,Tab Control(标签控件)用于组织多页面内容,但其原生实现仅负责标签绘制,内容面板的切换与管理需开发者手动处理,这带来了繁琐的布局与状态维护工作。为解决此问题,社区诞生了增强型控件CTabSheet,它通过封装标准Tab Control并自动管理多个CDialog子页面,实现了标签与内容的自动关联切换,极大提升了开

weixin_33858336

深入掌握MFC控件:从消息映射到自定义绘制的实战指南

在Windows桌面开发领域,GUI控件的有效管理是构建稳定应用的基础。其核心原理基于消息驱动架构,通过消息映射机制实现用户交互与程序逻辑的绑定。掌握控件的样式设置、数据交换(DDX/DDV)及自定义绘制等高级技术,能显著提升软件的可维护性与扩展性,尤其在处理复杂交互和性能优化时价值凸显。这些技术广泛应用于需要长期维护的工业控制软件、金融终端等C++桌面应用场景。本文聚焦于MFC框架,针对开发中常见的控件禁用、坐标变换(如旋转后按右下角旋转)等具体问题,提供从概念到落地的系统性解决方案。

weixin_34342992

进度条设置mfc

c++音乐播放器中设置进度条的方法音乐播放器中设置进度条的方法

OneOrNought
评论 7
收藏 已收藏
分享
返回顶部
marslycan
界面 15,976 成员 115,866 内容