MFC GetEditCtrl 报错非静态成员函数的非法调用
VS2012代码:voidCMainFrame::OnButton2(){//TODO:在此添加命令处理程序代码CEdit&theEdit=CEditView::GetE...
VS2012 代码:
void CMainFrame::OnButton2()
{
// TODO: 在此添加命令处理程序代码
CEdit& theEdit = CEditView::GetEditCtrl();
}
提示:
error C2352: “CEditView::GetEditCtrl”: 非静态成员函数的非法调用
1> e:\vs\vc\atlmfc\include\afxext.h(853) : 参见“CEditView::GetEditCtrl”的声明
为什么? 展开
void CMainFrame::OnButton2()
{
// TODO: 在此添加命令处理程序代码
CEdit& theEdit = CEditView::GetEditCtrl();
}
提示:
error C2352: “CEditView::GetEditCtrl”: 非静态成员函数的非法调用
1> e:\vs\vc\atlmfc\include\afxext.h(853) : 参见“CEditView::GetEditCtrl”的声明
为什么? 展开
2个回答
展开全部
你需要获取一个CEditView的实际指针,再调用GetEditCtrl。
现在这样的调用获取不到有效的指针。
解决办法:
你可以将按钮2的响应函数放到View类(删除现在的响应函数,重新在View类建立即可),这样就可以直接调用GetEditCtrl了。
如果一定要从主框架类CMainFrame获取视图类,你需要通过框架方式获取,这个单、多文档不同。如果单文档,一般这样使用:
CEditView* pView = (CEditView*)GetActiveView();
CEdit& theEdit = pView->GetEditCtrl();
追问
谢,但是多文档怎么实现?我这个工程是多文档……多谢指教!
追答
CEditView* pView = (CEditView*)(MDIGetActive()->GetActiveView());
CEdit& theEdit = pView->GetEditCtrl();
大致就是这样,不过说实话,这是获取当前活动视图,多视图的话其实还是使用第一种方法更好些。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询