[MFC]GetWindowText()
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[MFC]GetWindowText()相关的知识,希望对你有一定的参考价值。
--------------------
CFRAMEView::FUNC
CpuAddCmdDlg* addCmd = new CpuAddCmdDlg(NULL);//创建
if(IDOK == addCmd->DoModal())//模式运行,可以显示界面,也可以操作。
CString strName;
addCmd->m_pedit2->GetWindowText(strName); //这里老是出现问题,ASSERT(::IsWindow(m_hWnd));总是不对
CString strLast = "[双击添加新的命令]";
int index = listBox->FindString(0,(LPCTSTR)strLast);
listBox->DeleteString(index);
listBox->AddString(strName);
listBox->AddString(strLast);
delete addCmd;
以下是我的猜想:
没有一个parent,于是我傻傻的填写了个this:new CpuAddCmdDlg(this);问题依然存在
难道是m_hWnd为0?经过调试,m_hWnd不为0
难道是doModel之后addCmd 变质了?
请帮忙解答这个问题,感激
m_pedit2,是从资源获取的一个CEdit指针
你这句话是在对话框已经点击了OK按钮之后执行的,这个时候这个对话框已经消失了,所以对话框上面的edit控件当然也不在了,所以无法使用窗口函数GetWindowText了。
你需要为这个edit控件绑定一个CString类型变量,比如叫mystr,然后在这里把
addCmd->m_pedit2->GetWindowText(strName);改成
strName = addCmd->mystr;
PS:如果不想绑定变量到控件的话,那么就为CpuAddCmdDlg类增加一个CString 类型的变量,比如叫m_str,然后在这个对话框的OnOK函数里面执行m_pedit2->GetWindowText(m_str);追问
[这个对话框已经消失了,所以对话框上面的edit控]
看到这句话我不禁要追问下,所有窗体在关闭之后,其本身的窗口句柄以及其子窗口(控件)的m_hWnd都会清空了么?
全局函数的 GetDlgItem(HANDLE , int),我基本上执行是失败的,是否也因为这个原因?
感谢你的回答,我已经追加了10分悬赏。
你的清空是指给m_hWnd赋0吗?不会的。只是这个时候这个窗口句柄所表示的窗口已经被销毁了,窗口的MFC实例和窗口本身不是一会儿事儿(事实上没有MFC实例,窗口依然可以创建),窗口销毁了,窗口MFC实例还在,所以你还可以调用类似addCmd-m_hWnd;这样的语句,但是这个时候窗口已经不在了,所以::IsWindow(m_hWnd);会返回0。
另外销毁窗口也并不意味着窗口实例被销毁,所以你还需要delete addCmd来彻底回收空间。
GetDlgItem一样是需要窗口存在的时候才能调用的,窗口都已经不存在了的话当然也就不知道这个上面有哪些控件了,也就无法获取到指定的控件了。
所以通常的做法都是给控件绑定变量或者是在OnOK函数里面(这个时候窗口还存在)来做相应的处理。
试试
CString strName[100];以上是关于[MFC]GetWindowText()的主要内容,如果未能解决你的问题,请参考以下文章
mfc中,怎么把一个窗口的编辑框内容调用到另一个窗口的控件里
vc6.0如何使用getwindowtext函数获取edit控件中的文本内容