VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1992|回复: 12

[已解决]MFC-GetDlgItemText的一个小问题

[复制链接]
74_avatar_middle
最佳答案
7 
在线会员 发表于 2020-6-26 10:20:45 | 显示全部楼层 |阅读模式
MFC-GetDlgItemText的一个小问题
这样的,我写了一个程序,需要用到子窗口输入,然后将子窗口里输入的文本传回父窗口。但是我在父窗口里用GetDlgItemText获取文本一直失败,程序会卡死最后闪退(原先我是放到子窗口类里的IDOK函数处理的,同样也报错)
以下是一些调试信息,请大家帮我看一下,谢谢!
14R_IWNZ_P}N`UUZXZJ}4.png
断点设置在ZeroMemory哪里,这一小块是顺利执行的,一旦到了GetDlgItemText那里就会变成下图
MFC-GetDlgItemText的一个小问题
最佳答案
19_avatar_small
2020-6-26 13:36:53
User_Ghost 发表于 2020-6-26 13:08
就像这样,在点击“添加启动项”就会弹出子窗口,但是一按下“确定”就卡死最后闪退


哦    其实你写的没有问题 就是你不要他变量内存清零了   全局变量编译器会自动处理的
ZeroMemory()




上一篇:新手关于窗口之间消息传递的一个问题
下一篇:关于MFC的CTabView的问题
19_avatar_middle
最佳答案
12 
在线会员 发表于 2020-6-26 13:36:53 | 显示全部楼层    本楼为最佳答案   
bestAnswer
User_Ghost 发表于 2020-6-26 13:08
就像这样,在点击“添加启动项”就会弹出子窗口,但是一按下“确定”就卡死最后闪退


哦    其实你写的没有问题 就是你不要他变量内存清零了   全局变量编译器会自动处理的
ZeroMemory()
77_avatar_middle
最佳答案
2 
在线会员 发表于 2020-6-26 12:44:57 | 显示全部楼层
数据是通过什么方式传回父窗口的?是不是没有传回就被清除了?建议监控看看
19_avatar_middle
最佳答案
12 
在线会员 发表于 2020-6-26 13:00:17 | 显示全部楼层
本帖最后由 236a 于 2020-6-26 13:03 编辑

很简单啊   你在父窗口调用子窗口的   你要拿到子窗口的控件指针
如果不是我说的那样 你把你的窗口(父窗口和子窗口)界面截图下  我们好帮你分析呢
70_avatar_middle
最佳答案
49 
在线会员 发表于 2020-6-26 13:51:55 | 显示全部楼层
全局函数  int GetDlgItemText( HWND hDlg , int nID, LPTSTR lpStr, int nMaxCount) const
窗口类里的函数 int CWnd::GetDlgItemText(int nID, CString& rString) const

GetDlgItemText其实是有句柄参数的,在窗口类里调用 ,调用的是当前窗口类的GetDlgItemText ,隐去了窗口句柄参数,用的窗口句柄是当前窗口,所以你直接在父窗口里获取子窗口的控件是不行的


如果你要获取子窗口的text,我想到两种办法

1.   子窗口指针->GetDlgItemText(id,val);
2     ::GetDlgItemText(子窗口指针->m_hWnd, int nID, LPTSTR lpStr, int nMaxCount)
74_avatar_middle
最佳答案
7 
ico_lz  楼主| 发表于 2020-6-26 13:05:54 | 显示全部楼层
harrythank 发表于 2020-6-26 12:44
数据是通过什么方式传回父窗口的?是不是没有传回就被清除了?建议监控看看

MFC-GetDlgItemText的一个小问题
这一块的完整代码,我是觉得CRegAdd应该会在函数结尾才会消亡,所以应该是不存在提前消亡的
我是在父窗口Button控件响应函数里定义两个CString,然后直接用GetDlgItemText获取子窗口ID下的文本,不知道这么写有没有问题,之前我是在子窗口的“确定”按钮响应函数里添加的,但是错误跟上边儿一样
74_avatar_middle
最佳答案
7 
ico_lz  楼主| 发表于 2020-6-26 13:08:47 | 显示全部楼层
236a 发表于 2020-6-26 13:00
很简单啊   你在父窗口调用子窗口的   你要拿到子窗口的控件指针
如果不是我说的那样 你把你的窗口(父窗 ...

MFC-GetDlgItemText的一个小问题
MFC-GetDlgItemText的一个小问题
就像这样,在点击“添加启动项”就会弹出子窗口,但是一按下“确定”就卡死最后闪退
74_avatar_middle
最佳答案
7 
ico_lz  楼主| 发表于 2020-6-26 14:27:40 | 显示全部楼层
236a 发表于 2020-6-26 13:36
哦    其实你写的没有问题 就是你不要他变量内存清零了   全局变量编译器会自动处理的
ZeroMemory()

非常感谢,已经解决了,删去ZeroMemory就可以了(只是我还是有点不懂为什么自己在清零就会报错)
也非常感谢Tony666,以后我会注意窗口句柄问题的,谢谢!
28_avatar_middle
最佳答案
0 
在线会员 发表于 2020-6-26 17:08:45 | 显示全部楼层
父窗口不是可以拿到子窗口的指针么  拿到指针想做什么就做 什么
19_avatar_middle
最佳答案
12 
在线会员 发表于 2020-6-27 01:03:16 | 显示全部楼层
User_Ghost 发表于 2020-6-26 14:27
非常感谢,已经解决了,删去ZeroMemory就可以了(只是我还是有点不懂为什么自己在清零就会报错)
也非常 ...

你参数填错了  多看看msdn
87_avatar_middle
最佳答案
16 
在线会员 发表于 2020-6-27 06:56:42 | 显示全部楼层
本帖最后由 cqzj70 于 2020-6-27 07:05 编辑

楼主对ZeroMemory()用法是有问题的,ZeroMemory()是不能拿来对CString清空置零的。这是类,不崩溃才怪了。而且CStirng 自己都带有清空函数Empty();
74_avatar_middle
最佳答案
7 
ico_lz  楼主| 发表于 2020-6-27 09:20:23 | 显示全部楼层
cqzj70 发表于 2020-6-27 06:56
楼主对ZeroMemory()用法是有问题的,ZeroMemory()是不能拿来对CString清空置零的。这是类,不崩溃才怪了。 ...

明白了,谢谢。没注意看ZeroMemory的用法,直接写上边儿的……
74_avatar_middle
最佳答案
7 
ico_lz  楼主| 发表于 2020-6-27 09:21:40 | 显示全部楼层
236a 发表于 2020-6-27 01:03
你参数填错了  多看看msdn

可是我调试的时候,这两句ZeroMemory是运行正常的,到GetDlgItemText才报错
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-12-11 11:45

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表