MDI的主框架是唯一可以加载菜单资源的框架,
当框架中没有任何文档时,主框架装载菜单资源IDR_FRAME_MAIN
当框架中有某种类型的文档打开时,主框架装载对应类型的菜单资源,比如IDR_XXXTYPE。我的问题是:
主框架装载菜单的时机具体是什么(哪个函数),有没有高手研究过这个问题,还希望指教!
先谢谢。
当框架中没有任何文档时,主框架装载菜单资源IDR_FRAME_MAIN
当框架中有某种类型的文档打开时,主框架装载对应类型的菜单资源,比如IDR_XXXTYPE。我的问题是:
主框架装载菜单的时机具体是什么(哪个函数),有没有高手研究过这个问题,还希望指教!
先谢谢。
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
OnCreate反正是已经加载完了。
Create又调用了CreateEx,CreateEx又调用了AfxCtxCreateWindowEx,上一步LoadMenu得到的菜单资源句柄作为CREATESTRUCT 传给了AfxCtxCreateWindowEx。
应该有XXXDoc.cpp,XXXView.cpp,XXX.cpp
在XXX.cpp中有InitInstance()函数,里面有加载楼主所说的内容
谢谢xyzhaopeng兄。
还有个问题,mfc框架在什么时机修改了窗口子菜单,并在其中加入打开的文档的名称作为其中的二级子菜单。
这个问题我问了好多高手都回答不了,我觉得你应该会,先感谢你的帮助。
刚才我没说清楚,我的意思是,mfc框架在什么时候修改了菜单栏中的窗口子菜单(帮助子菜单左边的菜单)。
每次用户打开一个文件,然后就会打开一个新的窗口,接着,当你去查看菜单栏中的窗口子菜单是,就会发现多了一个文件名称,但这个列表和文件子菜单中的列表不一样。我想知道,mfc框架是在什么函数直接修改菜单资源的。
MSDN的原文如下:
The default implementation looks for a pop-up menu containing standard Window menu commands such as ID_WINDOW_NEW and ID_WINDOW_TILE_HORZ.Override this member function if you have a Window menu that does not use the standard menu command IDs.所以,只需要覆盖CMDIFrameWnd::GetWindowMenuPopup就可以利用mfc框架使用自己想要的窗口列表菜单。
xyzhaopeng说得有道理,CMDIChildWnd::OnUpdateFrameMenu确实是最直接的修改菜单资源的位置。感谢xyzhaopeng的帮助,谢谢!!!