[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指针

addCmd->m_pedit2->GetWindowText(strName);
你这句话是在对话框已经点击了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函数里面(这个时候窗口还存在)来做相应的处理。

参考技术A

试试

CString strName[100];

以上是关于[MFC]GetWindowText()的主要内容,如果未能解决你的问题,请参考以下文章

mfc中,怎么把一个窗口的编辑框内容调用到另一个窗口的控件里

mfc 程序,debug版本正常和release版本异常。

vc6.0如何使用getwindowtext函数获取edit控件中的文本内容

mfc的一点总结-----Edit Control操作

MFC如何从MFCEditBrowseControl获取路径并将其复制到编辑控件?

mfc 如何使编辑框和变量关联