AppWizard向导产生的MFC框架中文件菜单项动作的缺省处理行为

AppWizard向导产生的MFC框架中文件菜单项动作的缺省处理行为
  可能大家用AppWizard向导后会有一个疑惑,AppWizard向导产生的菜单,比如“文件”菜单,我们没写一行代码,但却自动实现了相应的功能,它是怎么实现的?我们只能知道一个常识:一定是MFC框架在幕后做了一些事情,所以才会实现这些功能,这些功能自己是不会从天上掉下来的。
  你应该知道,AppWizard向导产生的“文件”菜单下的各个菜单项如:新建、打开、保存、另存为等等实际上是对应以下ID:ID_FILE_NEW, ID_FILE_OPEN,ID_FILE_SAVE,ID_FILE_SAVE_AS.....
  这些菜单项ID是MFC系统内置的,如果你想使用MFC框架提供的默认实现,就要用上面的这些ID值,不可更改。要是你改了ID,你就要自己去实现。
①在AppWizard产生的应用程序类(继承自CWinApp)中处理:
ID_FILE_NEW, ID_FILE_OPEN,ID_APP_ABOUT:
// CTestApp.cpp
BEGIN_MESSAGE_MAP(CTestApp, CWinApp)
//{{AFX_MSG_MAP(CTestApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
// NOTE - the ClassWizard will add and remove mapping macros here.
//    DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
END_MESSAGE_MAP

②在CDocument类中处理(在DOCCORE.CPP中实现):
ID_FILE_CLOSE,ID_FILE_SAVE,ID_FILE_SAVE_AS:
// CDocument()
BEGIN_MESSAGE_MAP(CDocument, CCmdTarget)
//{{AFX_MSG_MAP(CDocument)
ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

  上面是“文件”菜单的主要缺省处理,算是做为一个抛砖引玉吧。如果你在框架中使用了其它视类,比如CEditView,哪么就要在相应的cpp实现文件中查找对应的消息处理。

BEGIN_MESSAGE_MAP(CEditView, CCtrlView)
//{{AFX_MSG_MAP(CEditView)
ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdateNeedSel)
ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateNeedClip)
ON_UPDATE_COMMAND_UI(ID_EDIT_SELECT_ALL, OnUpdateNeedText)
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
ON_UPDATE_COMMAND_UI(ID_EDIT_FIND, OnUpdateNeedText)
ON_UPDATE_COMMAND_UI(ID_EDIT_REPLACE, OnUpdateNeedText)
ON_UPDATE_COMMAND_UI(ID_EDIT_REPEAT, OnUpdateNeedFind)
ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, OnUpdateNeedSel)
ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR, OnUpdateNeedSel)
ON_CONTROL_REFLECT_EX(EN_CHANGE, OnEditChange)
ON_WM_CREATE()
ON_MESSAGE(WM_SETFONT, OnSetFont)
ON_COMMAND(ID_EDIT_CUT, OnEditCut)
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
ON_COMMAND(ID_EDIT_CLEAR, OnEditClear)
ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
ON_COMMAND(ID_EDIT_SELECT_ALL, OnEditSelectAll)
ON_COMMAND(ID_EDIT_FIND, OnEditFind)
ON_COMMAND(ID_EDIT_REPLACE, OnEditReplace)
ON_COMMAND(ID_EDIT_REPEAT, OnEditRepeat)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
// Special registered message for Find and Replace
ON_REGISTERED_MESSAGE(_afxMsgFindReplace, OnFindReplaceCmd)
// Standard Print commands (print only - not preview)
ON_COMMAND(ID_FILE_PRINT, CCtrlView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CCtrlView::OnFilePrint)
END_MESSAGE_MAP()

     上面是CEditView类实现的IDS,这些ID你就不用费心去实现,CEditView类已经为你实现好了。有了上面的CEditView类实现,你基本上就可以实现一个比较完善的文本编辑器了,还不快动手实践一下!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值