一个关于涉及MFC 内部的程序问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 13:53:46
我想用MFC编写一个记事本程序,我新建一个(.EXE)的工程,单文档,在第四步的“高级”->"文件扩展名"中我输入"txt",在最后一步,把View类的基类改成CEditView.最后运行,不用写一行代码,一个记事本生成了,可以进行保存,打开等等......
当对文字进行修改后,不保存,点击"关闭"按钮,会弹出一个消息框,提示是否保存,问题出来了: 这个"消息框"MessageBox()是从哪里调用出来的? 由于涉及MFC 的内部机制, 所以想请VC高手帮小弟指点迷津,感激不尽!!!!!
其实我是想将这个功能屏蔽掉,不让它弹出,由我来判断文件是否有改动,进而完成我的操作,恳请高手们直接告诉我如何做,从哪个函数下手,或是其它方法。

好像LZ是要问是什么函数调用了MessageBox(...)吧?
-------------------------------------------
BOOL CNopanleDoc::CanCloseFrame(CFrameWnd* pFrame)
{
// TODO: Add your specialized code here and/or call the base class
if(this->IsModified())//判断文件是否被修改过
{
AfxMessageBox("将这一语句替换成你所要的操作");
this->SetModifiedFlag(false);//不弹出询问
}
return CDocument::CanCloseFrame(pFrame);
}
-------------------------------------------
在工工程名Doc.cpp处右击鼠标,选择建立类向导,添加CanCloseFrame,将里面的内容替换成上面的内容就行了

MessageBox()虽然是CWnd类的成员函数,但它的实现是调用的系统API,也就是封装在user32.dll动态库的导出函数,有W/A(UNICODE和MB2个版本)。
你可以点输入MessageBox,点击它,点F12,就看到其函数实现或者函数声明了。

MessageBox的实现跟MFC体系基本没有关系,试想想,一个简单的弹出式对话框还要用CWnd这么大一个类来封装一下,那不是吃饱了撑的了么
其参数均使用的系统类,
HWND,父窗口
IN LPCSTR lpText, 对话框文本
IN LPCSTR lpCaption,对话框标题
IN UINT uType; 对话框类型,显示的图标或按钮个数控制

CDocument创建的类提供一个标志,以跟踪某文档在最后一次存盘后是否被修改过.当打开文档或将文档存盘时,标志会自动消除.只要文档被改动,文档类就会使用SetModifiedFlag(