VC中单文档框架删除菜单的调试经历(4)
仔细阅读,发现Create()函数是在CFrameWnd类中,而CMainFrame类的父类就是CFrameWnd类,再一查,发现了CFrameWnd::Create()是虚函数,所以只要我们在CMainFrame中实现Create(),并将其中加载菜单的相关代码去掉应该就可以了,修改代码如下:
BOOL CMainFrame::Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle /*= WS_OVERLAPPEDWINDOW*/,
const RECT& rect/* = rectDefault*/,
CWnd* pParentWnd /*= NULL*/, // != NULL for popups
LPCTSTR lpszMenuName/* = NULL*/,
DWORD dwExStyle/* = 0*/,
CCreateContext* pContext/* = NULL*/)
{
HMENU hMenu = NULL;
if (lpszMenuName != NULL)
{
}
m_strTitle = lpszWindowName; // save title for later
if (!CreateEx(dwExStyle, lpszClassName, lpszWindowName, dwStyle,
rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top,
pParentWnd->GetSafeHwnd(), hMenu, (LPVOID)pContext))
{
TRACE(traceAppMsg, 0, "Warning: failed to create CFrameWnd. ");
if (hMenu != NULL)
DestroyMenu(hMenu);
return FALSE;
}
}
编译,运行,成功了。
以前写代码总是查上网,翻书,看帮助查资料,现在才发现源代码也是很好的资料。上网,翻阅书籍查资料固然不错,但是那是学习别人已有的知识,自己解决问题的能力没什么大的提高。通过研究源代码,我们可以在没有任何书籍,文档的情况下解决问题。这是我第一次深入跟踪到MFC源代码内部进行调试,希望对像我一样的初学者有帮助。
- 上一篇:一例奇怪的编译错误(VC6)
- 下一篇:vc中改变对话框以及视类窗口的颜色