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)则会将数据从数据成员传送到对应的控件中

相关推荐
李昊哲小课1 小时前
WSL Ubuntu 24.04 GPU 加速环境完整安装指南
c++·pytorch·深度学习·ubuntu·cuda·tensorflow2
Byte不洛1 小时前
C++继承详解(菱形继承与虚拟继承)
c++·继承·面向对象·菱形继承·虚拟继承
闻缺陷则喜何志丹1 小时前
【排序 离散化 二维前缀和】 P7149 [USACO20DEC] Rectangular Pasture S|普及+
c++·算法·排序·离散化·二维前缀和
君义_noip1 小时前
信息学奥赛一本通 4163:【GESP2512七级】城市规划 | 洛谷 P14921 [GESP202512 七级] 城市规划
c++·算法·图论·gesp·信息学奥赛
不想写代码的星星2 小时前
C++ 的花括号有多狂?std::initializer_list 那些不讲武德的事儿
c++
elseif1232 小时前
初学者必背【考点清单(大全)】【上篇】
开发语言·c++·笔记·学习·循环结构·分支结构·考纲
并不喜欢吃鱼2 小时前
从零开始C++----二.(下篇)模版进阶与编译全过程的复习
开发语言·c++
智者知已应修善业2 小时前
【51单片机按键控制流水灯+数码管显示按键次数】2023-6-15
c++·经验分享·笔记·算法·51单片机
汉克老师2 小时前
GESP2023年12月认证C++三级( 第三部分编程题(1、小猫分鱼))
c++·算法·模拟算法·枚举算法·gesp三级·gesp3级
不知名的老吴2 小时前
View的三大特性之一:迟绑定
开发语言·c++·算法