我建立了一个基于FormView的单文档视图(CWatchView),然后在这个上面放了一个tab控件(m_tab),然后我又建了一个对话框CMyDlg类,然后在CWatchView生成两个基于CMyDlg类的对象m_dlg1,m_dlg2.然后把对话框贴到m_tab控件的两个标签上。
我现在想在CMyDlg类里面绘图,但是数据是在文档类CWatchDoc中,我该怎么做才能调用到这些数据呢?
我现在是在CMyDlg类的OnPaint()加了一句CWatcher1Doc* pDoc = GetDocument();(文件头也加了#include "Watcher1Doc.h"),但是我发现对话框类里面没有GetDocument()函数,所以无法实现,该怎么办呢????
是不是还要修改CWatcher1App类中的CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CWatcher1Doc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CWatcher1View));这里是不是要改成RUNTIME_CLASS(CMyDlg));????
AddDocTemplate(pDocTemplate);
我现在想在CMyDlg类里面绘图,但是数据是在文档类CWatchDoc中,我该怎么做才能调用到这些数据呢?
我现在是在CMyDlg类的OnPaint()加了一句CWatcher1Doc* pDoc = GetDocument();(文件头也加了#include "Watcher1Doc.h"),但是我发现对话框类里面没有GetDocument()函数,所以无法实现,该怎么办呢????
是不是还要修改CWatcher1App类中的CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CWatcher1Doc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CWatcher1View));这里是不是要改成RUNTIME_CLASS(CMyDlg));????
AddDocTemplate(pDocTemplate);
解决方案 »
- 使用DOM时,怎样能使表单元素的cnclick()事件发生,怎样使select元素的onchange()事件发生?
- 如何高效地得到屏幕可见区域,占整个屏幕的百分比?来者有分
- 郁闷,还是数据类型转换的问题,关于接收的串口数据的转换,偶是VC++初学者!
- 怎样做到VMWare虚拟机中的时间与主机不同步?
- vs.net 2003 自带的 水晶报表 在哪里 ? 如何使用?
- 应用程序的句柄是否是无限的?
- 怎样通过String Table修改menu的caption
- 如何提出HTML源程序中的javascript中的链接
- 我想学VC++6,各位能否给我介绍几本好书,在下不胜感激!
- 谁知道那里有<<thing in c++>>的原版下载!告诉小弟一下!小弟给全部的分!!
- 随系统启动的程序ADO无法访问数据。
- 如何使用html control来正确显示网页?
CMyDlg dlg(pMainFrame);
这就等于就是一步步传递过去 view -> tab -> Dialog
或者AfxGetMainWnd获得框架类指针,再GetActiveView获得视图指针,再GetDocument获得文档指针。
在CMyDialog类中定义
CMyTabCtrl *m_tab;//定义一个指向tab控件的指针
m_tab=GetParent(this);
CWatchView *m_view;//定义一个指向view的指针
m_view=GetParent(m_tab);
CWatchDoc *m_Doc;//定义一个指向Doc的指针
m_view=GetDocument(m_Doc);不知道这样写对不对呢?麻烦帮忙修改一下,好吗?谢谢
CWatchDoc* m_Doc = (CWatchDoc*)((CFrameWnd*)AfxGetMainWnd())->GetActiveView()->GetDocument();
在CMyDialog类中定义
HWND pwnd=GetSafeHwnd();//获取对话框的句柄
HWND pwnd1=GetParent(pwnd);//获取tab控件的句柄,这里老有错误error C2660: 'GetParent' : function does not take 1 parameters,可是GetParent却是只有一个参数啊?
HWND pwnd2=GetParent(pwnd);//获取视图控件的句柄CWatchDoc *m_Doc;//定义一个指向Doc的指针
m_view=GetDocument(pwnd2);//获得文档指针
CWatcher1Doc* m_Doc = (CWatcher1Doc*)(CView*)(GetParent()->GetParent())->GetDocument();
你看第一个GetParent()是对话框取得其父tab控件的指针(这个地方有些不明白GetParent()返回值应该是句柄啊,怎么成了指针了呢?)
第二个GetParent()是tab控件取得其父视图的指针,(CView*)(GetParent()->GetParent())应该是这样吧?帮忙解析一下,省得以后再遇到类似问题还要向您讨教,谢谢
注意:->操作符优先与强制类型转换。
第一个问题是不是这个意思:GetParent()函数在CWnd类中被重载以后,就无需参数了,返回的是其父的指针。而我说的那个指的是在SDK中,GetParent()函数需要一个HWND类型的参数,返回值也是其父的HWND句柄
HWND hWnd
);CWnd 中的GetParent()作为成员函数了,CWnd 作为hWnd 这个参数
CWnd* GetParent();这个是系统API:
HWND GetParent(HWND hWnd);