有没有比较全面地介绍下这个问题。谢谢哈。。
我想有一种是都相应地设置一个全局变量,然后每个类的变量都对应过去,这样就可以了。不过很浪费资源的说。
7 个解决方案
#1
把MainFrame的this指针设置给View.
#2
可以考虑通过app类来中转
#3
n种办法
1、可以在stdafx.h中声明extern int xxx;
然后在MainFrame里面定义它int xxx;
最后就可以到处用了
2、定义你的app的公有变量,CxxxApp里,至于使用时对theApp强制转换成CxxxApp即可
3、定义一个外部类,比如Cxx类,然后在这个类里用static成员
4、无聊的搞法,写个文件啊
5、最无聊的搞法,可以试试SendMessage啊
1、可以在stdafx.h中声明extern int xxx;
然后在MainFrame里面定义它int xxx;
最后就可以到处用了
2、定义你的app的公有变量,CxxxApp里,至于使用时对theApp强制转换成CxxxApp即可
3、定义一个外部类,比如Cxx类,然后在这个类里用static成员
4、无聊的搞法,写个文件啊
5、最无聊的搞法,可以试试SendMessage啊
#4
第二种方法说错了,不能用theApp,好像是使用getapp还是个什么函数得到一个CWinApp的指针,然后强转
#5
变量定义为public成员,在视图类中用GetParentFrame可以获得框架类指针,强制转换成CMainFrame*类型,然后就可以用指针指向变量了。
#6
获得CWinApp:
-在CMainFrame,CChildFrame,CDocument,CView中直接调用AfxGetApp()或用theApp
-在其它类中只能用AfxGetApp()
获得CMainFrame:
-在CMinApp中用AfxGetMainWnd()或者m_pMainWnd
-在CChildFrame中可用GetParentFrame()
-在其它类中用AfxGetMainWnd()
获得CChildFrame:
-在CView中用GetParentFrame()
-在CMainFrame中用MDIGetActive()或GetActiveFrame()
-在其它类中用AfxGetMainWnd()->MDIGetActive()或AfxGetMainWnd()->GetActiveFrame()
获得CDocument:
-在CView中用GetDocument()
-在CChildFrame中用GetActiveView()->GetDocument()
-在CMainFrame中用
-if SDI:GetActiveView()->GetDocument()
-if MDI:MDIGetActive()->GetActiveView()->GetDocument()
-在其它类中
-if SDI:AfxGetMainWnd()->GetActiveView()->GetDocument()
-if MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument()
获得CView:
-在CDocument中 POSITION pos = GetFirstViewPosition();GetNextView(pos)
-在CChildFrame中 GetActiveView()
-在CMainFrame中
-if SDI:GetActiveView()
-if MDI:MDIGetActive()->GetActiveView()
-在其它类中
-if SDI:AfxGetMainWnd()->GetActiveView()
-if MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()
-在CMainFrame,CChildFrame,CDocument,CView中直接调用AfxGetApp()或用theApp
-在其它类中只能用AfxGetApp()
获得CMainFrame:
-在CMinApp中用AfxGetMainWnd()或者m_pMainWnd
-在CChildFrame中可用GetParentFrame()
-在其它类中用AfxGetMainWnd()
获得CChildFrame:
-在CView中用GetParentFrame()
-在CMainFrame中用MDIGetActive()或GetActiveFrame()
-在其它类中用AfxGetMainWnd()->MDIGetActive()或AfxGetMainWnd()->GetActiveFrame()
获得CDocument:
-在CView中用GetDocument()
-在CChildFrame中用GetActiveView()->GetDocument()
-在CMainFrame中用
-if SDI:GetActiveView()->GetDocument()
-if MDI:MDIGetActive()->GetActiveView()->GetDocument()
-在其它类中
-if SDI:AfxGetMainWnd()->GetActiveView()->GetDocument()
-if MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument()
获得CView:
-在CDocument中 POSITION pos = GetFirstViewPosition();GetNextView(pos)
-在CChildFrame中 GetActiveView()
-在CMainFrame中
-if SDI:GetActiveView()
-if MDI:MDIGetActive()->GetActiveView()
-在其它类中
-if SDI:AfxGetMainWnd()->GetActiveView()
-if MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()
#7
我的习惯是把所有可能用到的全局变量集中到一个类,
在其它要调用到的类中声明一个指针,在构造函数时分配内存,析构时收回内存,如:
class CGlobFunc
{
public:
CGlobFunc();
virtual ~CGlobFunc();
public:
CString GetCountyName(long iCountyID);
...
}
在要使用的类中
class CSampleplotDlg : public CDialog
{
public:
CSampleplotDlg(CWnd* pParent = NULL); // standard constructor
...
CGlobFunc *m_pglobFunc;
}
...
CSampleplotDlg::CSampleplotDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSampleplotDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSampleplotDlg)
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_pglobFunc = new CGlobFunc();//分配内存
}
使用时:
m_pglobFunc->GetCountyName(id);
其它的使用可以类推.
在其它要调用到的类中声明一个指针,在构造函数时分配内存,析构时收回内存,如:
class CGlobFunc
{
public:
CGlobFunc();
virtual ~CGlobFunc();
public:
CString GetCountyName(long iCountyID);
...
}
在要使用的类中
class CSampleplotDlg : public CDialog
{
public:
CSampleplotDlg(CWnd* pParent = NULL); // standard constructor
...
CGlobFunc *m_pglobFunc;
}
...
CSampleplotDlg::CSampleplotDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSampleplotDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSampleplotDlg)
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_pglobFunc = new CGlobFunc();//分配内存
}
使用时:
m_pglobFunc->GetCountyName(id);
其它的使用可以类推.
#1
把MainFrame的this指针设置给View.
#2
可以考虑通过app类来中转
#3
n种办法
1、可以在stdafx.h中声明extern int xxx;
然后在MainFrame里面定义它int xxx;
最后就可以到处用了
2、定义你的app的公有变量,CxxxApp里,至于使用时对theApp强制转换成CxxxApp即可
3、定义一个外部类,比如Cxx类,然后在这个类里用static成员
4、无聊的搞法,写个文件啊
5、最无聊的搞法,可以试试SendMessage啊
1、可以在stdafx.h中声明extern int xxx;
然后在MainFrame里面定义它int xxx;
最后就可以到处用了
2、定义你的app的公有变量,CxxxApp里,至于使用时对theApp强制转换成CxxxApp即可
3、定义一个外部类,比如Cxx类,然后在这个类里用static成员
4、无聊的搞法,写个文件啊
5、最无聊的搞法,可以试试SendMessage啊
#4
第二种方法说错了,不能用theApp,好像是使用getapp还是个什么函数得到一个CWinApp的指针,然后强转
#5
变量定义为public成员,在视图类中用GetParentFrame可以获得框架类指针,强制转换成CMainFrame*类型,然后就可以用指针指向变量了。
#6
获得CWinApp:
-在CMainFrame,CChildFrame,CDocument,CView中直接调用AfxGetApp()或用theApp
-在其它类中只能用AfxGetApp()
获得CMainFrame:
-在CMinApp中用AfxGetMainWnd()或者m_pMainWnd
-在CChildFrame中可用GetParentFrame()
-在其它类中用AfxGetMainWnd()
获得CChildFrame:
-在CView中用GetParentFrame()
-在CMainFrame中用MDIGetActive()或GetActiveFrame()
-在其它类中用AfxGetMainWnd()->MDIGetActive()或AfxGetMainWnd()->GetActiveFrame()
获得CDocument:
-在CView中用GetDocument()
-在CChildFrame中用GetActiveView()->GetDocument()
-在CMainFrame中用
-if SDI:GetActiveView()->GetDocument()
-if MDI:MDIGetActive()->GetActiveView()->GetDocument()
-在其它类中
-if SDI:AfxGetMainWnd()->GetActiveView()->GetDocument()
-if MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument()
获得CView:
-在CDocument中 POSITION pos = GetFirstViewPosition();GetNextView(pos)
-在CChildFrame中 GetActiveView()
-在CMainFrame中
-if SDI:GetActiveView()
-if MDI:MDIGetActive()->GetActiveView()
-在其它类中
-if SDI:AfxGetMainWnd()->GetActiveView()
-if MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()
-在CMainFrame,CChildFrame,CDocument,CView中直接调用AfxGetApp()或用theApp
-在其它类中只能用AfxGetApp()
获得CMainFrame:
-在CMinApp中用AfxGetMainWnd()或者m_pMainWnd
-在CChildFrame中可用GetParentFrame()
-在其它类中用AfxGetMainWnd()
获得CChildFrame:
-在CView中用GetParentFrame()
-在CMainFrame中用MDIGetActive()或GetActiveFrame()
-在其它类中用AfxGetMainWnd()->MDIGetActive()或AfxGetMainWnd()->GetActiveFrame()
获得CDocument:
-在CView中用GetDocument()
-在CChildFrame中用GetActiveView()->GetDocument()
-在CMainFrame中用
-if SDI:GetActiveView()->GetDocument()
-if MDI:MDIGetActive()->GetActiveView()->GetDocument()
-在其它类中
-if SDI:AfxGetMainWnd()->GetActiveView()->GetDocument()
-if MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument()
获得CView:
-在CDocument中 POSITION pos = GetFirstViewPosition();GetNextView(pos)
-在CChildFrame中 GetActiveView()
-在CMainFrame中
-if SDI:GetActiveView()
-if MDI:MDIGetActive()->GetActiveView()
-在其它类中
-if SDI:AfxGetMainWnd()->GetActiveView()
-if MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()
#7
我的习惯是把所有可能用到的全局变量集中到一个类,
在其它要调用到的类中声明一个指针,在构造函数时分配内存,析构时收回内存,如:
class CGlobFunc
{
public:
CGlobFunc();
virtual ~CGlobFunc();
public:
CString GetCountyName(long iCountyID);
...
}
在要使用的类中
class CSampleplotDlg : public CDialog
{
public:
CSampleplotDlg(CWnd* pParent = NULL); // standard constructor
...
CGlobFunc *m_pglobFunc;
}
...
CSampleplotDlg::CSampleplotDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSampleplotDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSampleplotDlg)
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_pglobFunc = new CGlobFunc();//分配内存
}
使用时:
m_pglobFunc->GetCountyName(id);
其它的使用可以类推.
在其它要调用到的类中声明一个指针,在构造函数时分配内存,析构时收回内存,如:
class CGlobFunc
{
public:
CGlobFunc();
virtual ~CGlobFunc();
public:
CString GetCountyName(long iCountyID);
...
}
在要使用的类中
class CSampleplotDlg : public CDialog
{
public:
CSampleplotDlg(CWnd* pParent = NULL); // standard constructor
...
CGlobFunc *m_pglobFunc;
}
...
CSampleplotDlg::CSampleplotDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSampleplotDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSampleplotDlg)
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_pglobFunc = new CGlobFunc();//分配内存
}
使用时:
m_pglobFunc->GetCountyName(id);
其它的使用可以类推.