MFC单文档的菜单在何时创建?
解答:参见窗体创建API CreateWindowEx,中的参数有一项指向了HMENU,因此菜单加载必定与此API有关,下面来调试一个流程
_tWinMain //程序入口
AfxWinMain //同入口
CtestApp::InitInstance //应用程序初始化
ProcessShellCommand(cmdInfo) //初始时会执行FILE_NEW命令,此命令会引发创建框架
AfxGetApp()->OnCmdMsg //消息分发
_AfxDispatchCmdMsg //消息分发
CWinApp::OnFileNew() //消息被分发到CWinApp中
m_pDocManager->OnFileNew() //会调用文档的OnFileNew函数开始创建文档
CDocTemplate::CreateNewFrame//文件创建时文件中的框架为Null会创建框架
pFrame->LoadFrame //框架会创建对应的窗体资源
CFrameWnd::Create //在这里会加载菜单,使用的LoadMenu
CWnd::CreateEx //加载完Menu后会调用CreateEx创建窗体,实际它采用的CreateWindowEx来创建的窗体,其中就包含了刚刚加载的Meun
AfxCtxCreateWindowEx //这个分调用CreateWindowEx
重点说明,为何MFC会在把窗体资源关联到一起,原因是因为WIN32的API就是这样干的!具体为什么这样干,可能是历史原因吧!
MFC菜单中有个属性叫Prompt,意思是用于在状态栏的提示,为何为会每个属性中都有\n符号
如:更改打印机选项和打印选项\n打印设置
解答:这是分隔符,\n前的是显示在状态栏的,\n后的显示在tooltip窗口(鼠标放在按钮上几秒钟,就弹出的这个窗口)