UI界面点击按钮一直转圈假死

最近维护一个老的项目工程,编译之后测试发现,某一个按钮,点击之后一直转圈,鼠标变成忙碌状态,查看任务管理器显示未响应,该怎么破呢?

首先怀疑是不是修改了对话框资源导致资源异常呢,屏蔽修改的代码还是一样,当然ID重复也有可能,这个工作量有点大,不迫不得已不会这样修改,因为修改还涉及界面中英文翻译切换。

于是开始看点击按钮响应的界面,发现 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support这个函数中

有些函数在基类前,有的在基类后。

通常有两种写法:

方法一:基类+自己代码

CPropertyPageWithLang::DoDataExchange(pDX);

XXXXXXXXXXX

XXXXXXXXXXX

XXXXXXXXXXX

方法二:自己代码+基类

XXXXXXXXXXXXXX

XXXXXXXXXXXXXXX

XXXXXXXXXXXXXXX

XXXXXXXXXXXXXXX

CPropertyPageWithLang::DoDataExchange(pDX);

错误的方法:
自己代码+基类+自己代码
XXXXXXXXXXX
XXXXXXXXXXX
CPropertyPageWithLang::DoDataExchange(pDX);
XXXXXXXXXXX

XXXXXXXXXXX

原来这里出现了异常,把它修改成以上两种任何一种方式,奇迹出现了,再次打开时,可以正常显示再也不会转圈了。

DoDataExchange函数在MFC(Microsoft Foundation Classes)框架中扮演着重要角色,它主要用于在对话框的控件和成员变量之间进行数据交换和验证。当需要在控件和变量之间传递数据时,不需要直接调用DoDataExchange函数,而是通过调用UpdateData函数来间接调用。UpdateData函数内部会调用DoDataExchange,并且它有一个布尔型参数来决定数据传递的方向。调用UpdateData(TRUE)会将数据从对话框的控件传送到对应的数据成员中,而调用UpdateData(FALSE)则会将数据从数据成员传送到对应的控件中

相关推荐
郝学胜_神的一滴18 小时前
CMake 034:生成器表达式:解耦构建时序、精简分支逻辑的终极利器
c++·cmake
见过夏天1 天前
C++ 基础入门完全指南
c++
用户805533698033 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
BadBadBad__AK3 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
卷无止境4 天前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
卷无止境4 天前
OpenMPI、MPICH 与 OpenMP:关系、核心概念与架构全解
c++·后端
郝学胜_神的一滴5 天前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
卷无止境7 天前
C++ 的Eigen 库全解析
c++
卷无止境7 天前
现代 C++特性大盘点:一门脱胎换骨的老语言
c++·后端
郝学胜_神的一滴7 天前
CMake 27:缓存变量的特性、语法、类型与实操全解
c++·cmake