怎么在一个类中取得文档类的指针????拜托了 怎么从一个类中(它的基类是CWnd)取得文档类中的指针啊????各位好心的拜托了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CMDIChildWnd* pChild; pChild=(CMDIChildWnd*)(m_pMainFrm->GetActiveFrame()); CMme_plusView* pView = reinterpret_cast<CMme_plusView*>(pChild->GetActiveView()); CMme_plusDoc* pDoc = reinterpret_cast<CMme_plusDoc*>(pChild->GetActiveView()->GetDocument()); 换成CRSDoc* pDoc=(CRSDoc*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveDocument();倒是编译成功了 但是跟踪pDoc指针的到是0x00000000, CFrameWnd::GetActiveDocument returned 0x00000000 {CDocument} 返回的不是CRSDoc的文档指针啊 晕……还有什么方法么???? 还有我用这个方法CRSDoc* pDoc=((CMainFrame *)AfxGetMainWnd())->GetActiveDocument();试了 出现这个D:\vc++\MyProjects1\复件 RS\复件 RS\RSView.cpp(435) : error C2440: 'initializing' : cannot convert from 'class CDocument *' to 'class CRSDoc *'错误 应该怎么改啊……?? CRSDoc* pDoc=(CRSDoc*)((CMainFrame *)AfxGetMainWnd()->GetActiveFrame())->GetActiveDocument(); 楼主的是多文档的项目?CRSDoc* pDoc=(CRSDoc*)((CMainFrame *)AfxGetMainWnd()->GetActiveFrame())->GetActiveDocument(); 有错误啊 error C2039: 'GetActiveFrame' : is not a member of 'CWnd' GetActiveFrame()->GetActiveDocument(); 注意你写的类有没有重载GetDocument()这个函数啊。没有的话,那么估计都是会出错的了还有你的基类是CVIEW的吗?还是直接继承CWND这个也有关系了 class CRSView : public CWnd{// Constructionpublic: CRSView();private:// Attributespublic: bool bol; // Operationspublic:// Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CRSView) protected: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); //}}AFX_VIRTUAL// Implementationprotected: HICON m_hIcon; CRectTracker* m_tracker;public: //void Zoom(float fXZoomRatio, float fYZoomRatio); void ReadBinary(int i,int j,CString strFileName); void ReadBinary(int i,int j,float **z); void DrawImage(int x,int y,float z); virtual ~CRSView(); // Generated message map functionsprotected: //{{AFX_MSG(CRSView) afx_msg void OnPaint(); afx_msg void OnZoomOut(); afx_msg void OnZoomIn(); afx_msg void OnPan(); afx_msg void OnEagle(); afx_msg void OnSingle(); afx_msg void OnMultiple(); //}}AFX_MSG DECLARE_MESSAGE_MAP()};然后我想在CRSView类一个函数里取得文档类的指针,就是:// TODO: Add your message handler code here and/or call default //CRSDoc *pDoc=GetDocument(); //int mouseX=point.x; //int mouseY=point.y; //自己定义doc类的指针在view获取 pDoc=new CRSDoc; //pDoc=(CRSDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument(); //CRSDoc* pDoc=(CRSDoc*)((CMainFrame *)AfxGetMainWnd()->GetActiveFrame())->GetActiveDocument(); //CRSDoc *pDoc; if(pDoc!=NULL) { int nWidth=pDoc->m_tracker.m_rect.Width(); int nHeight=pDoc->m_tracker.m_rect.Height(); //CRSDoc* pDoc=(CRSDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument(); //CRSDoc* pDoc=(CRSDoc*)((CFrameWnd*)AfxGetMainWnd()); //CRSDoc* pDoc=((CMainFrame *)AfxGetMainWnd())->GetActiveDocument(); //CRect rect(0,0,jy,ix); //CRect rectSave(0,0,jy,ix); CRect rectSave; //获取图形区域矩形对象的大小 pDoc->m_tracker.GetTrueRect(rectSave); //如果没有点中图形,这时候HitTest将返回-1.这时候产生橡皮条. if(pDoc->m_tracker.HitTest(point)<0) { CRectTracker tracker; //画橡皮擦 if(tracker.TrackRubberBand(this,point,pDoc->m_bAllowInvert)) { // 下面的工作将用来检查橡皮条的矩形是否与图形区域的矩形相交. CRect rectT; //对橡皮条的矩形进行校正. tracker.m_rect.NormalizeRect(); // so intersect rect works //橡皮条区域与图形区域的交叉区域不为空,则将图形区域的调整句柄进行相应 //的设置 if(rectT.IntersectRect(tracker.m_rect,pDoc->m_tracker.m_rect)) { //如果调整句柄位于矩形内部(resizeInside)则将调整句柄设置在矩形的外 //部(resizeOutside) if(pDoc->m_tracker.m_nStyle&CRectTracker::resizeInside) { //去除resizeInside 形式 pDoc->m_tracker.m_nStyle&=~CRectTracker::resizeInside; //设置resizeOutside形式 pDoc->m_tracker.m_nStyle|=CRectTracker::resizeOutside; } //否则如果调整句柄在外部就将调整句柄放在区域内部 else { // just use inside resize handles on first time pDoc->m_tracker.m_nStyle&=~CRectTracker::resizeOutside; pDoc->m_tracker.m_nStyle|=CRectTracker::resizeInside; } //更新所有视图,显示调整后的图形 pDoc->UpdateAllViews(NULL,(LPARAM)(LPCRECT)rectSave); pDoc->UpdateAllViews(NULL); } } } //如果选中了图形区域,则调用Track函数自动处理,同时处理后更新视图即可. else if(pDoc->m_tracker.Track(this,point,pDoc->m_bAllowInvert)) { // normal tracking action, when tracker is "hit" pDoc->UpdateAllViews(NULL,(LPARAM)(LPCRECT)rectSave); pDoc->UpdateAllViews(NULL); } } CWnd ::OnLButtonDown(nFlags, point);} 就是这样的意思啊 我准确的是想取到CRSDoc文档类的指针 各位大虾好心帮帮忙啦 小弟实在有点急呀…… void CRSView::OnLButtonDown(UINT nFlags, CPoint point) CTestApp* pApp = ((CTestApp*)(AfxGetApp())); POSITION pos= pApp->GetFirstDocTemplatePosition(); CDocTemplate* pDT = pApp->GetNextDocTemplate(pos); pos=pDT->GetFirstDocPosition(); CTestDoc *pDoc=(CTestDoc*)pDT->GetNextDoc(pos); CTestDoc *m_pDoc; while (pDoc) { if(pDoc->IsKindOf(RUNTIME_CLASS(CTestDoc))) { m_pDoc = (CTestDoc *)pDoc; break; } pDoc=(CTestDoc*)pDT->GetNextDoc(pos); } CTestApp* pApp = ((CTestApp*)(AfxGetApp())); POSITION pos= pApp->GetFirstDocTemplatePosition(); CDocTemplate* pDT = pApp->GetNextDocTemplate(pos); pos=pDT->GetFirstDocPosition(); CTestDoc *pDoc=(CTestDoc*)pDT->GetNextDoc(pos); CTestDoc *m_pDoc; while (pDoc) { if(pDoc->IsKindOf(RUNTIME_CLASS(CTestDoc))) { m_pDoc = (CTestDoc *)pDoc; break; } pDoc=(CTestDoc*)pDT->GetNextDoc(pos); } CTestApp* pApp = ((CTestApp*)(AfxGetApp())); POSITION pos= pApp->GetFirstDocTemplatePosition(); CDocTemplate* pDT = pApp->GetNextDocTemplate(pos); pos=pDT->GetFirstDocPosition(); CTestDoc *pDoc=(CTestDoc*)pDT->GetNextDoc(pos); CTestDoc *m_pDoc; while (pDoc) { if(pDoc->IsKindOf(RUNTIME_CLASS(CTestDoc))) { m_pDoc = (CTestDoc *)pDoc; break; } pDoc=(CTestDoc*)pDT->GetNextDoc(pos); } CRuntimeClass* pClass = RUNTIME_CLASS( CObject ); 如果是单文档,while循环应该可以不要的。pDoc直接就可以得到指针。因为是单文档,GetActiveDocument是没用的。 CDocTemplate* pDT = pApp->GetNextDocTemplate(pos); 这句有错误啊 跟踪的……高手再留步…… 网间远程控制编程如何实现呢? 怎样修改默认资源语言? MFC操作Excel文件的问题! 无法定位dll上一个函数的问题 如何把double转换为CString类型 什么叫信号? 1000分求程序原码(可连接2个客户端的服务器程序) Remon Spekreijse编的串口Cserialport类能不能设置4个以上的串口 有关windows钩子的使用问题 请高手指点迷津! vc API函数串口通讯:串口怎样得到命令返回值后再判断发下一条命令 计时器的周期问题
pChild=(CMDIChildWnd*)(m_pMainFrm->GetActiveFrame()); CMme_plusView* pView = reinterpret_cast<CMme_plusView*>(pChild->GetActiveView());
CMme_plusDoc* pDoc = reinterpret_cast<CMme_plusDoc*>(pChild->GetActiveView()->GetDocument());
CRSDoc* pDoc=(CRSDoc*)((CMainFrame *)AfxGetMainWnd()->GetActiveFrame())->GetActiveDocument();
没有的话,那么估计都是会出错的了
还有你的基类是CVIEW的吗?
还是直接继承CWND这个也有关系了
{
// Construction
public:
CRSView();
private:
// Attributes
public:
bool bol;
// Operations
public:// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CRSView)
protected:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL// Implementation
protected:
HICON m_hIcon;
CRectTracker* m_tracker;public:
//void Zoom(float fXZoomRatio, float fYZoomRatio);
void ReadBinary(int i,int j,CString strFileName);
void ReadBinary(int i,int j,float **z);
void DrawImage(int x,int y,float z);
virtual ~CRSView(); // Generated message map functions
protected:
//{{AFX_MSG(CRSView)
afx_msg void OnPaint();
afx_msg void OnZoomOut();
afx_msg void OnZoomIn();
afx_msg void OnPan();
afx_msg void OnEagle();
afx_msg void OnSingle();
afx_msg void OnMultiple(); //}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
然后我想在CRSView类一个函数里取得文档类的指针,就是:// TODO: Add your message handler code here and/or call default
//CRSDoc *pDoc=GetDocument();
//int mouseX=point.x;
//int mouseY=point.y;
//自己定义doc类的指针在view获取 pDoc=new CRSDoc; //pDoc=(CRSDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument();
//CRSDoc* pDoc=(CRSDoc*)((CMainFrame *)AfxGetMainWnd()->GetActiveFrame())->GetActiveDocument();
//CRSDoc *pDoc;
if(pDoc!=NULL)
{ int nWidth=pDoc->m_tracker.m_rect.Width();
int nHeight=pDoc->m_tracker.m_rect.Height();
//CRSDoc* pDoc=(CRSDoc*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveDocument();
//CRSDoc* pDoc=(CRSDoc*)((CFrameWnd*)AfxGetMainWnd()); //CRSDoc* pDoc=((CMainFrame *)AfxGetMainWnd())->GetActiveDocument();
//CRect rect(0,0,jy,ix);
//CRect rectSave(0,0,jy,ix);
CRect rectSave;
//获取图形区域矩形对象的大小
pDoc->m_tracker.GetTrueRect(rectSave);
//如果没有点中图形,这时候HitTest将返回-1.这时候产生橡皮条.
if(pDoc->m_tracker.HitTest(point)<0)
{
CRectTracker tracker;
//画橡皮擦
if(tracker.TrackRubberBand(this,point,pDoc->m_bAllowInvert))
{
// 下面的工作将用来检查橡皮条的矩形是否与图形区域的矩形相交.
CRect rectT;
//对橡皮条的矩形进行校正.
tracker.m_rect.NormalizeRect(); // so intersect rect works
//橡皮条区域与图形区域的交叉区域不为空,则将图形区域的调整句柄进行相应
//的设置
if(rectT.IntersectRect(tracker.m_rect,pDoc->m_tracker.m_rect))
{
//如果调整句柄位于矩形内部(resizeInside)则将调整句柄设置在矩形的外
//部(resizeOutside)
if(pDoc->m_tracker.m_nStyle&CRectTracker::resizeInside)
{
//去除resizeInside 形式
pDoc->m_tracker.m_nStyle&=~CRectTracker::resizeInside;
//设置resizeOutside形式
pDoc->m_tracker.m_nStyle|=CRectTracker::resizeOutside;
}
//否则如果调整句柄在外部就将调整句柄放在区域内部
else
{
// just use inside resize handles on first time
pDoc->m_tracker.m_nStyle&=~CRectTracker::resizeOutside;
pDoc->m_tracker.m_nStyle|=CRectTracker::resizeInside;
}
//更新所有视图,显示调整后的图形
pDoc->UpdateAllViews(NULL,(LPARAM)(LPCRECT)rectSave);
pDoc->UpdateAllViews(NULL);
}
}
}
//如果选中了图形区域,则调用Track函数自动处理,同时处理后更新视图即可.
else if(pDoc->m_tracker.Track(this,point,pDoc->m_bAllowInvert))
{
// normal tracking action, when tracker is "hit"
pDoc->UpdateAllViews(NULL,(LPARAM)(LPCRECT)rectSave);
pDoc->UpdateAllViews(NULL);
}
}
CWnd ::OnLButtonDown(nFlags, point);
} 就是这样的意思啊 我准确的是想取到CRSDoc文档类的指针 各位大虾好心帮帮忙啦 小弟实在有点急呀……
CTestApp* pApp = ((CTestApp*)(AfxGetApp()));
POSITION pos= pApp->GetFirstDocTemplatePosition();
CDocTemplate* pDT = pApp->GetNextDocTemplate(pos);
pos=pDT->GetFirstDocPosition();
CTestDoc *pDoc=(CTestDoc*)pDT->GetNextDoc(pos);
CTestDoc *m_pDoc;
while (pDoc)
{
if(pDoc->IsKindOf(RUNTIME_CLASS(CTestDoc)))
{
m_pDoc = (CTestDoc *)pDoc;
break;
}
pDoc=(CTestDoc*)pDT->GetNextDoc(pos);
}
POSITION pos= pApp->GetFirstDocTemplatePosition();
CDocTemplate* pDT = pApp->GetNextDocTemplate(pos);
pos=pDT->GetFirstDocPosition();
CTestDoc *pDoc=(CTestDoc*)pDT->GetNextDoc(pos);
CTestDoc *m_pDoc;
while (pDoc)
{
if(pDoc->IsKindOf(RUNTIME_CLASS(CTestDoc)))
{
m_pDoc = (CTestDoc *)pDoc;
break;
}
pDoc=(CTestDoc*)pDT->GetNextDoc(pos);
}
CTestApp* pApp = ((CTestApp*)(AfxGetApp()));
POSITION pos= pApp->GetFirstDocTemplatePosition();
CDocTemplate* pDT = pApp->GetNextDocTemplate(pos);
pos=pDT->GetFirstDocPosition();
CTestDoc *pDoc=(CTestDoc*)pDT->GetNextDoc(pos);
CTestDoc *m_pDoc;
while (pDoc)
{
if(pDoc->IsKindOf(RUNTIME_CLASS(CTestDoc)))
{
m_pDoc = (CTestDoc *)pDoc;
break;
}
pDoc=(CTestDoc*)pDT->GetNextDoc(pos);
}
因为是单文档,GetActiveDocument是没用的。