CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

利用OnFileNew(),如何先初始化一些我自己的变量,然后再生成一个新文档&&视图?

楼主lovetsinghua(瞌睡♂工作虫)2003-05-04 00:03:10 在 VC/MFC / 基础类 提问

一个MDI  
  左边是一个controlbar,上面有一个button,当我点button的时候,生成一个view(就像用menu->file->new一样。  
  我把button的ID改成了ID_FILE_NEW,成了。  
  然后,我需要在点button生成view之前,做一些操作。我重载这个button的点击函数(OnFileNew()   )。然后在里面写我了自己的东东。最后,这个OnFileNew()不能完成生成view的功能了。  
   
  void   CLeftTab1::OnFileNew()    
  {  
  //   TODO:   Add   your   control   notification   handler   code   here  
  }//这是我刚重载时的样子。  
   
  是不是,这个消息在这里被截了?不传给mainframe了,导制了view的无法生成?  
   
  那我怎么做呢?  
  怎么样在完成我的操作后,让这个消息传下去呢? 问题点数:100、回复次数:27Top

1 楼lovetsinghua(瞌睡♂工作虫)回复于 2003-05-04 01:20:48 得分 0

是不是我的问题太简单了?  
  那至少可以来拿分呀?  
   
  是不是我没有说清楚?  
  那至少问一下呀?Top

2 楼homesong(.NET)回复于 2003-05-04 03:07:07 得分 0

写完自己的程序,最后加一句调用基类的OnFileNew()版本:CWinApp::OnFileNewTop

3 楼lovetsinghua(瞌睡♂工作虫)回复于 2003-05-04 11:02:32 得分 0

 
  :homesong(.NET)   ()   我试了,不行呀  
  error   C2248:   'OnFileNew'   :   cannot   access   protected   member   declared   in   class   'CWinApp'Top

4 楼mymmsc(热血老猫)回复于 2003-05-04 11:07:17 得分 0

我来学习一下。Top

5 楼lovetsinghua(瞌睡♂工作虫)回复于 2003-05-04 11:20:55 得分 0

没人理我啊Top

6 楼luyiping(路亦平)回复于 2003-05-04 11:34:28 得分 2

同意homesong(.NET)所说的,如果,不调用基类的函数的话,该操作就进行到你所写的代码为止,因为CWinApp::OnFileNew是虚拟函数Top

7 楼lovetsinghua(瞌睡♂工作虫)回复于 2003-05-04 11:37:14 得分 0

是啊,我希望这个消息传到我的代码后,继续传下去。  
  hmesong说的好像不行,cwinapp::onFileNew我无法访问,应该是一个proteced  
   
  是不是那什么getmessage()  
                        dispatchmessage()?????Top

8 楼lovetsinghua(瞌睡♂工作虫)回复于 2003-05-04 12:13:56 得分 0

upTop

9 楼lovetsinghua(瞌睡♂工作虫)回复于 2003-05-04 12:57:00 得分 0

upTop

10 楼Kaye(菜到几时)回复于 2003-05-04 13:37:04 得分 40

to   楼主:  
  在CYourApp里添加OnFileNew()调用CWinApp::OnFileNew();  
  然后再调用这个CYourApp::OnFileNew()不就结了Top

11 楼lovetsinghua(瞌睡♂工作虫)回复于 2003-05-04 14:10:21 得分 0

:   Kaye(真是那个菜)   (   )    
   
  怎么加?重载了后就不会调用cwinapp::onfilenew()了Top

12 楼jerkzzz(笨笨)回复于 2003-05-04 14:29:03 得分 0

是在重载函数的最后一句调用CWinApp::OnFileNew().Top

13 楼herrycsdn(卓一凡)回复于 2003-05-04 14:35:41 得分 27

你可以把cwinapp里的关于响应onFileNew的部分去掉,afx_msg   void   OnFileNew();和ON_COMMAND(ID_FILE_NEW,   OnFileNew),然后在cwinapp里添加public函数,OnFileNew();  
  这样在处理完你的代码后   调用OnFileNew();  
  希望我说的明白Top

14 楼homesong(.NET)回复于 2003-05-04 14:36:36 得分 30

我刚才试了一下:  
   
  改了两个地方:  
   
  ON_COMMAND(ID_FILE_NEW,   OnFileNew)  
   
  void   CBbApp::OnFileNew()    
  {  
   
  CWinApp::OnFileNew();  
  AfxMessageBox("ok");  
  }  
   
  成功运行Top

15 楼lovetsinghua(瞌睡♂工作虫)回复于 2003-05-04 15:02:27 得分 0

herrycsdn(卓一凡)       homesong(.NET)    
  我明白你在说什么,谢谢。可你这样不就和id_file_new脱离了吗?  
  //   CComApp  
   
  BEGIN_MESSAGE_MAP(CComApp,   CWinApp)  
  //{{AFX_MSG_MAP(CComApp)  
  ON_COMMAND(ID_APP_ABOUT,   OnAppAbout)  
  //}}AFX_MSG_MAP  
  //   Standard   file   based   document   commands  
  ON_COMMAND(ID_FILE_NEW,   CWinApp::OnFileNew)  
  ON_COMMAND(ID_FILE_OPEN,   CWinApp::OnFileOpen)  
  //   Standard   print   setup   command  
  ON_COMMAND(ID_FILE_PRINT_SETUP,   CWinApp::OnFilePrintSetup)  
  END_MESSAGE_MAP()  
   
  可以看出是调用CWinApp::OnFileNew,也就是基类的OnFileNew,而ID_FILE_NEW是一个内建的ID,在我的程序里我把任何一个button的ID改成ID_FILE_NEW,都调用CWinApp::OnFileNew.  
  但是,如果我对这个button的BN_CLIKCED重载,那就不会调用CWinApp::OnFileNew了。如果,我在这个重载函数里的最后一行加上CWinApp::OnFileNew,那会因为CWinApp::OnFileNew是protected级的,如果不是继承类的话,就不可以用(我用的正好不是其继承类)。如果要改成public,那就要改afxwin.h的声明,我晕。  
   
  所以,我觉得楼上两位说的不可行。  
  那能不能让这个消息在  
  void   CtabView::OnFileNew()    
  {  
   
  //我的代码  
   
  }  
  处理后,继续传上去呢?我的思路对吗?  
  Top

16 楼Kaye(菜到几时)回复于 2003-05-04 15:04:36 得分 0

to   楼主:  
  “怎么加?重载了后就不会调用cwinapp::onfilenew()了”  
   
  晕!自己在CYourApp::OnFileNew()调用CWinApp::OnFileNew();机器傻你也跟着傻啊?!  
  Top

17 楼lovetsinghua(瞌睡♂工作虫)回复于 2003-05-04 15:13:20 得分 0

Kaye(真是那个菜)    
   
  你试一下,我试过了,如果在CMyApp::OnFileNew()里调用CWinApp::OnFileNew()  
   
  我一点新建,就挂了。。。内存读写错误Top

18 楼Kaye(菜到几时)回复于 2003-05-04 15:17:30 得分 0

晕!都不知道你程序怎么调用的  
  void   CVisIvrApp::OnFileNew()  
  {  
  CWinApp::OnFileNew();  
  }  
  这是我公司项目里我写的源代码!  
   
  另外,ON_COMMAND(ID_FILE_NEW,   CWinApp::OnFileNew)  
  可以改成你所想要的任何函数上Top

19 楼lovetsinghua(瞌睡♂工作虫)回复于 2003-05-04 15:19:30 得分 0

我也晕,我觉得你说的是对的  
  等我再看一下  
  为什么内存读写错误?FTTop

20 楼homesong(.NET)回复于 2003-05-04 15:20:25 得分 0

我又试了一下:  
  在视图类添加了  
  ((CBbApp*)AfxGetApp())->OnFileNew();  
  成功运行  
  Top

21 楼lovetsinghua(瞌睡♂工作虫)回复于 2003-05-04 15:23:10 得分 0

谢谢,大家,我在调试。一会结分^_^_^_^Top

22 楼herrycsdn(卓一凡)回复于 2003-05-04 15:27:15 得分 0

对,楼上这样应该能行,  
  ((CBbApp*)AfxGetApp())->OnFileNew();  
   
  你的意思是我明白了,刚才理解错误,不好意思Top

23 楼homesong(.NET)回复于 2003-05-04 15:30:01 得分 0

注意用类向导,映射ID_FILE_NEW生成的CXXApp::OnFileNew()自然为共有成员,不会出现权限问题Top

24 楼mymmsc(热血老猫)回复于 2003-05-04 15:41:01 得分 1

我来学习一下。Top

25 楼lovetsinghua(瞌睡♂工作虫)回复于 2003-05-04 15:45:22 得分 0

我搞好了,很谢谢大家  
  很FT我自己,我在一个视类里用了一个指针,是空的。所以老出错,搞得我一直以是proteced问题,呵呵,真是晕死啊。  
  谢谢了~~~~Top

相关问题

  • 视图内容初始化。
  • VARIANT变量的初始化?!
  • 用初始化列表初始化变量的小问题
  • 如何初始化VARIANT变量?
  • 初始化一个变量的问题。
  • 关于变量初始化的问题!
  • VARIANT型的变量如何初始化?
  • 各种“变量”的初始化问题?
  • 各种“变量”的初始化问题?
  • VB\C\C++中的变量初始化

关键词

  • .net
  • 函数
  • 代码
  • 消息
  • view
  • onfilenew
  • cwinapp
  • 调用
  • 重载
  • 生成

得分解答快速导航

  • 帖主:lovetsinghua
  • luyiping
  • Kaye
  • herrycsdn
  • homesong
  • mymmsc

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo