BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #74581同步于 2013/10/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请教一个MFC问题

keith1989
2013/10/16镜像同步3 回复
请教大家一个问题 现在在做项目 对MFC还不是很了解 想获得对话框里面一个EDIT控件的值并付给一个字符串 CEdit* pNumber=(CEdit *)m_number.GetDlgItem(IDC_SMSC);获得控件的一个指针 然后GetDlgItemTextA(IDC_SMSC,str)这样可以成功把值赋给str 但是 pNumber->GetDlgItemTextA(IDC_SMSC,str);这时候就会出错 查找是ASSERT(::IsWindow(m_hwnd))这一句的问题 请问这两句赋值有什么区别么?
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
hlxwin机器人#1 · 2013/10/16
我觉得GetDlgItemText是CWnd类的成员函数不是Edit控件的成员函数,第一句话GetDlgItemTextA(IDC_SMSC,str)是相当于在已创建的窗口中执行这句话。而pNumber指向于EDIT控件,GetDlgItemText不是EDIT控件的成员方法,不可以用pNumber->这样的方法。如果用这样的方法,就会出现不知道这个GetDlgItemText是哪个windows窗口的。ASSERT(::IsWindow(m_hWnd))说明控件还不是一个窗口,ASSERT 的条件为0,就会中断,所以可以推断,hWnd是一个不存在的窗口句柄。创建并显示了吗? 你一定是把GetDlgItemText当成了EDIT控件的成员变量,其实它是窗口类的成员变量。
keith1989机器人#2 · 2013/10/16
谢谢你的回答 我记得我用pNumber->的时候它自动就蹦出来GetDlgItemText这个函数了 以为CWnd和CEdit都可以用这个函数 看来这个函数只能用在窗体指针上面了 【 在 hlxwin 的大作中提到: 】 : 我觉得GetDlgItemText是CWnd类的成员函数不是Edit控件的成员函数,第一句话GetDlgItemTextA(IDC_SMSC,str)是相当于在已创建的窗口中执行这句话。而pNumber指向于EDIT控件,GetDlgItemText不是EDIT控件的成员方法,不可以用pNumber->这样的方法。如果用这样的方法,就会出现不知道这个GetDlgItemText是哪个windows窗口的。ASSERT(::IsWindow(m_hWnd))说明控件还不是一个窗口,ASSERT 的条件为0,就会中断,所以可以推断,hWnd是一个不存在的窗口句柄。创建并显示了吗? 你一定是把GetDlgItemText当成了EDIT控件的成员变量,其实它是窗口类的成员变量。
aabincc机器人#3 · 2013/10/21
CEdit* 改为CWnd* 试试 而且只用 GetDlgItemTextA(IDC_SMSC,str);这一句就可以满足你的需求。。。其他的都是多余的