VC单文档多视图工程中,在任何地方访问某一指定视图类的方法
来源:互联网 发布:淘宝abc类违规 编辑:程序博客网 时间:2024/06/01 21:42
此处讨论的是单文档、多视图的VC工程。
我们知道,在多视图工程中,要获取某一个指定视图类的指针(进而对它里面的控件等进行操作),我们可以通过这样的办法:
从文档类取得视图类的指针:
CDocument类提供了两个函数用于视图类的定位:
GetFirstViewPosition()和GetNextView()
注意:GetNextView()括号中的参数用的是引用方式,因此执行后值可能改变.GetFirstViewPosition()用于返回第一个视图位置(返回的并非视图类指针,而是一个POSITION类型值),GetNextView()有两个功能:返回下一个视图类的指针以及用引用调动的方式来改变传入的POSITION类型参数的值。很明显,在Test程序中,只有一个视图类,因此只需将这两个函数调用一次即可得到CTestView的指针如下(需定义一个POSITION结构变量来辅助操作):
CView* pView;
POSITION pos=GetFirstViewPosition();
pView=GetNextView(pos);
这样,便可到了C*View类的指针pView.执行完成几句后,变量pos=NULL,因为没有下一个视图类,自然也没有下一个视图类的POSITION.但是之几条语句太简单,不具有太强的通用性和安全特征;当象前面说的那样,当要在多个视图为中返回某个指定类的指针时,我们需要遍历所有视图类,直到找到指定类为止。判断一个类指针指向的是否某个类的实例时,可用IsKindOf()成员函数时行检查。
如:
pView->IsKindOf(RUNTIME_CLASS(CView));
即可检查pView所指是否是CView类。
CDocument类提供了两个函数用于视图类的定位:
GetFirstViewPosition()和GetNextView()
注意:GetNextView()括号中的参数用的是引用方式,因此执行后值可能改变.GetFirstViewPosition()用于返回第一个视图位置(返回的并非视图类指针,而是一个POSITION类型值),GetNextView()有两个功能:返回下一个视图类的指针以及用引用调动的方式来改变传入的POSITION类型参数的值。很明显,在Test程序中,只有一个视图类,因此只需将这两个函数调用一次即可得到CTestView的指针如下(需定义一个POSITION结构变量来辅助操作):
CView* pView;
POSITION pos=GetFirstViewPosition();
pView=GetNextView(pos);
这样,便可到了C*View类的指针pView.执行完成几句后,变量pos=NULL,因为没有下一个视图类,自然也没有下一个视图类的POSITION.但是之几条语句太简单,不具有太强的通用性和安全特征;当象前面说的那样,当要在多个视图为中返回某个指定类的指针时,我们需要遍历所有视图类,直到找到指定类为止。判断一个类指针指向的是否某个类的实例时,可用IsKindOf()成员函数时行检查。
如:
pView->IsKindOf(RUNTIME_CLASS(CView));
即可检查pView所指是否是CView类。
但是我们也注意到:上述办法的前提条件是你先要得到文档类的指针。在视图类中,获取文档类指针的方法非常简单,但是想在程序的任何地方,例如点击一个菜单弹出的对话框中(指的是:在对话框类的实现文件里)获取文档类的指针,就要多加点东西了:
首先,我们为文档类添加一个静态函数:
public:
static CXXXDoc* GetDoc(); //其中CXXXDoc就是你的文档类的类名
static CXXXDoc* GetDoc(); //其中CXXXDoc就是你的文档类的类名
这个静态函数的实现是:
CXXXDoc* CXXXDoc::GetDoc()
{
CFrameWnd* pFrame = (CFrameWnd*)(AfxGetApp()->m_pMainWnd);
return (CXXXDoc*)pFrame->GetActiveDocument();
}
{
CFrameWnd* pFrame = (CFrameWnd*)(AfxGetApp()->m_pMainWnd);
return (CXXXDoc*)pFrame->GetActiveDocument();
}
然后,我们就可以在任何你需要获取某一指定视图类指针的地方,例如上面所说的对话框类中:
CXXXDoc* pDoc = CXXXDoc::GetDoc();
再用上面所说的“从文档类取得视图类的指针”的办法,来获取你想要的视图类指针了。得到了指针后,你就可以对视图中的控件等进行操作了。
- VC单文档多视图工程中,在任何地方访问某一指定视图类的方法
- VC中实现单文档切换多视图的方法
- vc中单文档多视图
- VC单文档实现多视图的方法
- VC单文档实现多视图的方法
- VC单文档实现多视图的方法
- 在任何地方获取程序的applicationContext。
- 单文档多视图的实现方法
- 单文档多视图方法
- 用VC++在单文档界面中创建多视图
- 用VC++在单文档界面中创建多视图
- 用VC++在单文档界面中创建多视图
- VC单文档切换多视图
- MFC 单文档工程 实现单文档多视图
- 在任何地方获取多数据源hibernate session 的方法
- VC 单文档视图分割
- 在任何地方部署Kubernetes
- 单文档中文档视图类之间的关系
- _doPostBack缺少对象解决办法
- 初次接触resin引擎
- 解决domino服务器错误:out of memory
- setTimeout 和 setInterval 的区别
- 查看程序运行失败后core文件给出的信息
- VC单文档多视图工程中,在任何地方访问某一指定视图类的方法
- 计算任何一天星期几? //转载
- oracle数据表插入时间
- String与StringBuilder的区别
- 智慧英语
- 看到 HTML 5 的感慨
- 在 TOMCAT 下配置 SSL
- 写给即将步入大学,主修计算机专业的青年们的一封信
- MonthCalendar(日历控件)扩展DoubleClick事件