MFC干净地删除冗余控件

本文详细介绍了在MFC应用程序中手动和通过类向导删除控件的步骤,包括删除rc2文件中的图标,头文件和源文件中的变量与函数,消息映射的修改,以及DoDataExchange函数中的数据交换语句。同时,文章列举了编译时(如error2001和1120)和运行时可能出现的问题及解决方法,强调了删除控件后检查关联代码的重要性。
摘要由CSDN通过智能技术生成

1.手动删除

1.首先确定控件有哪些相关的变量和函数;打开.rc2文件在里面删除对应的控件图标;

2.打开主对话框头文件;(一般类向导生成的函数和变量定义都在头文件的最后一个“public”l里);找到生成的变量定义和函数定义将其删除;

3.打开对话框源文件,找到控件定义的处理函数,将其删除(也可在最开始时双击控件按钮找到定义函数进行删除)

4.在BEGIN_MESSAGE_MAP()消息映射函数里,将控件对应的消息函数删除(一般有有波浪线标志)

5.最后删除变量的数据交换语句;在void CTestDlg::DoDataExchange(CDataExchange* pDX)函数里;这里的test为自定义的函数。

2.通过类向导删除

1.打开.rc文件;找到欲删除的控件;选中控件后按右键;选择“类向导”;在类向导页面找到控件对应的消息、成员变量,选中后点击“删除处理程序”;有的控件没有事件函数,可以直接删除,比如文本

此时在源文件里变量的定义声明、数据交换函数的相关语句、消息映射中的信息都被注释了。

2.在对话框内删除控件。

上面删除方法解决的是添加控件后自动添加的地方,而有的时候是我们主动写的代码,用到了控件iD等变量,这就需要我们自己找出来,删掉。一般编译时就会报错,这种好办,找到报错的地方修改。有的时候编译时检查不出来,运行时报错,这就要通过设定断点找出位置。

3.常见问题

3.1.编译时报错error 2001和1120

1 这个编译报错不会提示位置,这个报错可能是有mfc的消息函数没实现,

解决方法:进入类向导,如下图
在这里插入图片描述

用上面方法二删除的时候会删除成员变量和函数,而容易漏删的是消息messages

Messages栏里面黑色粗体的是已经添加的消息,看看有没有没用的,比如WM_HSCROLL,是一个滑动条的消息,删滑动条的时候很容易漏删这个。或者在源文件Dlg.cpp里的BEGIN_MESSAGE_MAP注释掉没用到的消息函数。

   2 这个报错的另一个原因是库文件没配置对

3.2.运行的时候报错

比如在一个按钮里设定其他按钮能否按下,写了以下几行代码,用到了这些按钮的ID,把这些按钮删除后,这几句话就出错了。但编译没报错,运行时报错,可以通过设定断点找出位置。

在这里插入图片描述

3.3.运行时出现“不支持尝试执行的操作”

在这里插入图片描述
原因分析:
1.控件ID修改,与关联变量没有对应上,因此报错误。
2.删除了某些控件,但是对应的控件变量没有删除掉。

解决方法:
在控件关联函数DoDataExchange()中查找并删除对应的控件变量或冗余的变量。
在这里插入图片描述

4.写在最后

从最不满意的客户身上,学到的东西最多。
从无到有,是件快乐的事;而从有到无,同样是种快感。

参考:https://blog.csdn.net/sinat_41852207/article/details/96044293

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值