在文档类中只要使用(多文档的,单文档的更简单一点儿)
POSITION pos=this->GetFirstViewPosition();//要写在文档类中,在其他类中把this换成文档指针就可以了
while(pos)
{
CView *pView=this->GetNextView(pos);
}
而在框架类中只要选取得文档对象,然后再使用上面的代码
以下是从一个对象得到另一个对象有方面(摘自MFC深入浅出)
从一个对象得到另一个对象的方法
本对象          要得到的对象      使用的成员函数
CDocument对象    视列表        GetFirstViewPosition,GetNextView
文档模板      GetDocTemplate
CView 对象      文档对象      GetDocument
边框窗口      GetParentFrame
CMDIChildWnd或
CFrameWnd 对象  活动视        GetActiveView
活动视的文档    GetActiveDocument
CMDIFrameWnd对象 活动文档边框窗口 MDIGetActive
在框架类中使用 GetActiveView();
在文档类中(CMainFrame*)(AfxGetApp()->m_pMainWnd))->GetActiveView();
MFC中怎么在CMainFrame下获得View类的指针
使用GetActiveView()函数
MFC中普通类如何获取view类的指针?
在普通类(Generic class)中怎么得到view类的指针?我试过这样:
CMainFrame *p=(CMainFrame*)AfxGetMainWnd();
CView *pv=p->GetActiveView();
按照你的用法应该就是可以的!
是不是在这样用时,View还没有创建完成啊,所以pv才是空的。
CMainFrame *m_pfm = (CMainFrame*)AfxGetApp()->m_pMainWnd;
...*m_pView = (...*)m_pfm->GetActiveView();
少一句:AfxGetApp()
CMainFrame *p=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CView *pv = (CView*)p->GetActiveView();
楼上的分析在理,楼主理一下函数调用顺序, 别是什么PreCreateWindow或是CXXXApp,CXXXFrame的构造函数,InitInstance里,模板主窗口都没建完就准备操纵这个CView了
asdfasdf
怎样在MFC中返回类的指针,比如cwin,view类等等!
在CView类中,调用this->GetDocument()得到doc。
在CDocument类中,调用GetFirstViewPosition()和GetNextView()得到所有的view。
在其它类中,一种方法先是把指针传进去,以备调用的时候使用。另外就要用AfxGetApp()得到CWinApp,然后再用GetFirstDocTemplatePosition()和GetNextDocTemplate()得到doc template,然后调用GetFirstDocPosition()和GetNextDoc()得到doc。
如何在OnDraw函数或***Dlg函数中获得View类的指针(this)或整个对话框的指针?
在单文档中你可以采用如下方法:
现在要获得指针的文件开始处包含两个文件:
视图的主框架类头文件,即#include "MainFrm.h"
视图类头文件,即#include "XXView.h"
然后在要访问m_pSet处添加如下语句
CMainFrame* frm=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CXXView* pView=(CXXView*)frm->GetActiveView();
pView即View类指针
不过你用this不是更简单吗?
mfc的单文档中从一个视图的treeview
类中获取Ctestview产生的视图窗口句柄?
获取单文档框架中的那个视图的窗口句柄。求一段代码。网上查了一下,没弄出来。哪位兄弟有时间写一段。
你说的不明不白的。方法可谓多矣。
可以通过全局对象theApp获得视图指针,然后
视图指针->GetSafeHwnd();获得句柄。
还可以发送自定义消息把句柄发送到指定窗口类。
还可以在你的stdafx.h中定义一个Cview指针,在程序初始化过程使之指向View类,在你的treeview中使用。
还可以自己为treeview类定义方法接收句柄,在调用的时候传入。
注意处理好创建顺序问题,否则debug下会出断言错误。
方法真的很多。
如果你没有用到文档/视图结构,单文档是在创框架窗口中创建的。有一个变量m_wndView。这个就是那个句柄了。他是CWnd派生的。
如果你用到了文档/视图结构,直接GetActiveView就可以。
还有一种情况,如果你用了切分窗口。。。。。。。
忘了哪个函数了。Get***Pane好像。。查一下便知。
mfc单文档Ctestview产生的视图窗口初始标题如何获取?
你可以在资源文件里修改字符窜,具体怎么修改上网查,
另外一个方法是在view类的PreCreateWindow函数里return之前加入
m_strTitle  =  "单文档标题";
启动了另一个线程CMyApp,如何在CMyApp中访问我的 View类呢?
如果我是重新生成了一个WinApp类,并且调用AfxBeginThread((RUNTIME_CLASS)CMyApp)启动了另一个线程,那么我又如何在CMyApp中访问我的  View类呢? 
这个问题我早上就问了,可是没有人给我答案。有哪位高手能赐教啊 
1。你可以把该View的类作为参数传入进去,这是最简单的解决方法 
2。你可以用如下方法得到 
CWinApp  *  pA=AfxGetApp(); 
POSITION  pos=pA->GetFirstDocTemplatePosition(); 
CDocTemplate  *  pDT=pA->GetNextDocTemplate(pos); 
pos=pDT->GetFirstDocPosition(); 
CDocument  *  pD=pDT->GetNextDoc(pos); 
pos=pD->GetFirstViewPosition(); 
CView  *  pV=pD->GetNextView(pos); 
当然,原理是这样,如果你有多个View,或者有Doc,甚至有多个DocTemplate,可以适当调整 
源代码我试过了,应该没什么问题了吧
mfc单文档中如何获取View视图(CmyView类实例产生的窗口)窗口的句柄?在另一个视图类中
通过App类来获取.
头文件定义:CmyView *GetmyView();
实现:
CmyView *CmyApp::GetmyView()
{
if(m_pDocManager)
{
POSITION pos1 = m_pDocManager->GetFirstDocTemplatePosition();
while (pos1)
{
CDocTemplate *pDocTemplate = m_pDocManager->GetNextDocTemplate(pos1);
if(pDocTemplate)
{
POSITION pos2 = pDocTemplate->GetFirstDocPosition();
while (pos2)
{
CDocument *pDoc = pDocTemplate->GetNextDoc(pos2);
if(pDoc)
{
POSI
TION pos3 = pDoc->GetFirstViewPosition();
while (pos3)
{
CView *pView = pDoc->GetNextView(pos3);
if(pView)
{
if(pView->IsKindOf(RUNTIME_CLASS(CmyView)))
return (CmyView*)pView;
深入浅出mfc}
}
}
}
}
}
}
return NULL;
}
补充一点,如果你是用静态分割产生的分割视图,可以充分利用CSplitterWnd的GetPane函数,比如,在CmylView中去获取CmyView的窗口句柄(假设CmyView在分割的0行0列):
CSplitterWnd *ps = (CSplitterWnd *)GetParent();
CmyView *pView = (CmyView *)(ps->GetPane(0,0));
pView - >m_hWnd即可获得该视图窗体的句柄
简单的很:因为你的view类不止一个,只有当你的view类活动时获取View视图(CmyView类实例产生的窗口)窗口的句柄才有意义!只要一个函数就可以解决。
CView* GetActiveView( ) const;
GetActiveView( )获得当前活动view类窗口句柄.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。