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




