一个关于涉及MFC 内部的程序问题
我想用MFC编写一个记事本程序,我新建一个(.EXE)的工程,单文档,在第四步的“高级”->"文件扩展名"中我输入"txt",在最后一步,把View类的基类改成CEdit...
我想用MFC编写一个记事本程序,我新建一个(.EXE)的工程,单文档,在第四步的“高级”->"文件扩展名"中我输入"txt",在最后一步,把View类的基类改成CEditView.最后运行,不用写一行代码,一个记事本生成了,可以进行保存,打开等等......
当对文字进行修改后,不保存,点击"关闭"按钮,会弹出一个消息框,提示是否保存,问题出来了: 这个"消息框"MessageBox()是从哪里调用出来的? 由于涉及MFC 的内部机制, 所以想请VC高手帮小弟指点迷津,感激不尽!!!!!
其实我是想将这个功能屏蔽掉,不让它弹出,由我来判断文件是否有改动,进而完成我的操作,恳请高手们直接告诉我如何做,从哪个函数下手,或是其它方法。 展开
当对文字进行修改后,不保存,点击"关闭"按钮,会弹出一个消息框,提示是否保存,问题出来了: 这个"消息框"MessageBox()是从哪里调用出来的? 由于涉及MFC 的内部机制, 所以想请VC高手帮小弟指点迷津,感激不尽!!!!!
其实我是想将这个功能屏蔽掉,不让它弹出,由我来判断文件是否有改动,进而完成我的操作,恳请高手们直接告诉我如何做,从哪个函数下手,或是其它方法。 展开
4个回答
展开全部
好像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,将里面的内容替换成上面的内容就行了
-------------------------------------------
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; 对话框类型,显示的图标或按钮个数控制
你可以点输入MessageBox,点击它,点F12,就看到其函数实现或者函数声明了。
MessageBox的实现跟MFC体系基本没有关系,试想想,一个简单的弹出式对话框还要用CWnd这么大一个类来封装一下,那不是吃饱了撑的了么
其参数均使用的系统类,
HWND,父窗口
IN LPCSTR lpText, 对话框文本
IN LPCSTR lpCaption,对话框标题
IN UINT uType; 对话框类型,显示的图标或按钮个数控制
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CDocument创建的类提供一个标志,以跟踪某文档在最后一次存盘后是否被修改过.当打开文档或将文档存盘时,标志会自动消除.只要文档被改动,文档类就会使用SetModifiedFlag()将此标志置位啦.SetModifiedFlag()函数以TRUE或FALSE为参数,缺省参数为TRUE,TRUE即是通知框架,此文档在最后一次存盘后又被修改过了.可以通过调用CDocument中的ISModified()成员函数来查询此标志.你说的这个询问MessageBox()就是框架根据此标志来发出的命令.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
MessageBox()是CWnd类的成员函数
它的继承机制如下:
CObject-->CCmdTarget---->CWnd;
从上面的脉络我们可以看出CWnd是CCmdTarget的子类;而所有关于消息处理的类都是直接或间接从CCmdTarget继承来的!只要是从CCmdTarget或其子类继承的类都将有消息处理功能;
它的继承机制如下:
CObject-->CCmdTarget---->CWnd;
从上面的脉络我们可以看出CWnd是CCmdTarget的子类;而所有关于消息处理的类都是直接或间接从CCmdTarget继承来的!只要是从CCmdTarget或其子类继承的类都将有消息处理功能;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询