
要想联系成员变量,得先得到CMainFrame CView的指针
MFC应用程序中指针的使用
1) 在View中获得Doc指针
2) 在App中获得MainFrame指针
3) 在View中获得MainFrame指针
4) 获得View(已建立)指针
5) 获得当前文档指针
6) 获得状态栏与工具栏指针
7) 获得状态栏与工具栏变量
8) 在Mainframe获得菜单指针
9) 在任何类中获得应用程序类
10) 从文档类取得视图类的指针(1)
11) 在App中获得文档模板指针
12) 从文档模板获得文档类指针
13) 在文档类中获得文档模板指针
14) 从文档类取得视图类的指针(2)
15) 从一个视图类取得另一视图类的指针
VC中编程对于刚刚开始学习的同学,最大的障碍和问题就是消息机制和指针获取与
*** 作。其实这些内容基本上是每本VC学习工具书上必讲的内容,而且通过MSDN很多
问题都能解决。下面文字主要是个人在编程中指针使用的一些体会,说的不当的地
方请指正。一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,
无论是多文档还是单文档,都存在指针获取和 *** 作问题。下面这节内容主要是一般
的框架,然后再讲多线程中的指针使用。使用到的类需要包含响应的头文件。首先
一般获得本类(视,文档,对话框都支持)实例指针this,用this的目的,主要可以通
过类中的函数向其他类或者函数中发指针,以便于在非本类中 *** 作和使用本类中的
功能。
1) 在View中获得Doc指针 CYouSDIDoc pDoc=GetDocument();一个视只能有一个文
档。
2) 在App中获得MainFrame指针
CWinApp 中的 m_pMainWnd变量就是MainFrame的指针
也可以: CMainFrame pMain =(CMainFrame )AfxGetMainWnd();
3) 在View中获得MainFrame指针 CMainFrame pMain=(CmaimFrame )AfxGetApp()->m_pMainWnd;
4) 获得View(已建立)指针CyouView pView=(CyouView )pMain->GetActiveView();
5) 获得当前文档指针 CDocument pCurrentDoc =(CFrameWnd )m_pMainWnd->GetActiveDocument();
6) 获得状态栏与工具栏指针 CStatusBar pStatusBar=(CStatusBar )AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
CToolBar pToolBar=(CtoolBar )AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);
7) 如果框架中加入工具栏和状态栏变量还可以这样
(CMainFrame )GetParent()->m_wndToolBar;
(CMainFrame )GetParent()->m_wndStatusBar;
8) 在Mainframe获得菜单指针 CMenu pMenu=m_pMainWnd->GetMenu();
9) 在任何类中获得应用程序类
用MFC全局函数AfxGetApp()获得。
Frame里面只能加载CView或者由CView继承而来的子类,不能直接加载对话框。 你可以考虑d出的方式加载对话框。或者将对话框的基类改成CFormView,在修改对应的位置,基本上就是初始化的几个消息要修改一下。 class CDlgView: public CFormView 只需要改几个消息的。
现机制,只是楼主不用啊。
这样的程序设计应该是这样的:
1派生一个CButton的子类,通过类向导为该子类添加相应的内容,如可以找到BN_CLICKED,然后写窗口函数。
2切换到要包含该按钮的对话框/视图等容器,添加该按钮类的一个实例,即视图类的成员变量。然后动态创建。
3程序运行后,单击按钮,程序执行先前在1中定义好的窗口函数。
为什么要这样做,而不是像楼主那样的说法,直接添加个功能--“如果真的只能手动添加,那么当初VC60的作者怎么不设计这个功能?”?
如果真的这样做了,反而显出了微软的水平不高!!!因为这种做法是不符合面向对象和代码重用的要求的。楼主可能一时无法理解,时间长了,就会明白了。
PS我们怎么可能往已经做好的CButton里插入BN_CLICKED响应函数的代码呢?要插入代码,也只可能在CButton的子类里插入。那既然程序要求有个新的类,为什么要把新的类和VIEW混在一起?模块化的设计概念是什么为什么要采用模块化的设计方案?MFC把所有的类都放在一对文件里,一个CPP对应一个H文件。楼主看下通过VS下的应用程序向导创建的所有程序如SDI,MDI,DIALOG,都能发现一个类对应一对CPP和H。为什么不干脆全都混在一起算了! 楼主可以手工添加代码把按钮和视图混在一起,这个在代码技术上一点不难。但我绝对不会做这么不明智的选择!
=====================================================
对不起,60很久前就不用了,对他的 *** 作环境不是很熟悉,无法在未安装60的情况下提供 *** 作步骤。但是,如楼主所陈述,对function name设为OnClicked后,点击OK按钮后,向导应该会生成关于OnClicked的函数框架,楼主只要在函数体中写代码就可以了。当运行后,点击你的那个BUTTON,就会执行OnClicked函数体中的代码了。
另外,60之后的2003、2005、2008同60的 *** 作界面有了很大的不同,之后几个版本的 *** 作界面变化不是很大。学习VC,上手不只是学习怎么写MFC,开始的时候MFC和 *** 作界面的学习是同等重要的,也就是说如果学习1个小时,有半个小时必须花在学习 *** 作界面上。可惜的是,能详细介绍 *** 作界面的书不多。而且,如前所述,根据楼主的版本不同,应该挑选不同版本的初级VC教程进行学习,并且选择2到3本来学,因为没有一本书能涵盖所有有关 *** 作方面的VC教程的。推荐一本初级书籍--《VC深入详解》。另外值得提醒的是,可以选择2005之后的版本来学习,因为通常60所附带的代码库比较陈旧,不提供新推出的API,因此,如果使用60,就必须自己手工从网上下载资源,更新相关的代码库。
双击该按钮,VC++会自动给该按钮添加上按钮对应的消息映射,并将输入焦点定位在点击该按钮后执行的代码函数体内。然后在该函数体内发自定义的消息给CView或调用CView内的一个Public类型的函数(在该函数内提示按钮被单击)
。
CFormCommandView::m_str
这样肯定是无法获取实际运行窗口数据的。想在CView中改变FormView的编辑框,你需要在CView中获取FormView的实际指针,再 *** 作,这个过程稍微复杂。
通过AfxGetMainWnd()获取主框架指针;
强制转换后,获取拆分窗口变量pMainWnd->m_wndSplitter的指针;
通过拆分指针的函数m_wndSplitter->GetPane(0,1); 可以获取FormView的指针m_formwnd;
然后就可以改变编辑框的值了:m_formwnd->GetDlgItem(IDC_EDIT1)->SetWindowText(m_str);
以上就是关于如何联系cmainframe和cview各自的成员变量全部的内容,包括:如何联系cmainframe和cview各自的成员变量、MFC关于如何在CView中显示对话框、MFC 的消息以及响应函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)