0

我目前正在学习 MFC,首先,你们有没有人知道一个解释了每个事件的站点,例如,当您单击功能区中的新建时,该事件会在那里触发.

实际上这是我的问题,当您单击功能区中的文件,然后单击新建(来自 mfc 的模板)时,它在哪里执行,因为我找不到它?

谢谢你

4

1 回答 1

0

我推荐 Scot Wingo 的书MFC Internals。书中描述了MFC的消息路由机制。它可能有点过时,但它显示了在编译器附带的 MFC 源文件中查找的位置。简而言之,

1) 单击 File-New 按钮会导致一条消息发布到您的应用程序 2) 最终 AfxInternalPumpMessage() 调用 GetMessage(),调用 AfxInternalPreTranslateMessage(),可能还有 TranslateMessage() 和 DispatchMessage() 3) 最终消息发出到 AfxWindowProc()、AfxCallWindowProc() 和 CFrame 派生窗口的虚拟 WindowPrc()(假设功能区、工具栏或菜单生成的命令)。4) 最终窗口进程发现它是一条 WM_COMMAND 消息并调用 OnCmdMsg()。5) MFC 的命令路由允许视图、文档、框架窗口和应用程序在处理消息时有一个裂缝。

要处理消息,派生的 CCmdTarget 派生对象(CView、CDocument、CFrameWnd、CWinApp)必须具有消息映射 BEGIN_MESSAGE_MAP(classname)/END_MESSAGE_MAP(),条目为 ON_COMMAND(ID_FILE_NEW, CommandHandlerFunc),其中 CommandHandlerFunc 是派生类中的函数,它是带有 void 参数的 void 返回类型。

BEGIN_MESSAGE_MAP(CMyApp)
   ON_COMMAND(ID_FILE_NEW, OnFileNew)
END_MESSAGE_MAP()
于 2012-10-09T20:26:40.760 回答