请教:调试时出现的问题

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

问题类如下:

class CUserFrame : public CMDIChildWnd

调用函数如下,实现功能是只能生成一个子框架和视图:

void CDatamartApp::OnUserManagement()

{

extern CUserFrame * bUserManagement;

if(!bUserManagement)

{

CMainFrame* pFrame = STATIC_DOWNCAST(CMainFrame, m_pMainWnd);

bUserManagement=(CUserFrame *)pFrame->CreateNewChild(RUNTIME_CLASS(CUserFrame), IDR_MAINFRAME, m_hMDIMenu, m_hMDIAccel);

}

else

{

bUserManagement->SendMessage(WM_SETFOCUS);

}

}

程序运行后,只要调用OnUserManagement(),跟踪器就出现:

Warnning: no shared menu/acceltable for MDI Child window.

经过追踪,发现问题是winmdi.cpp中以下函数(红色部分)导致的:

BOOL CMDIChildWnd::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle,

CWnd* pParentWnd, CCreateContext* pContext)

{

// only do this once

ASSERT_VALID_IDR(nIDResource);

ASSERT(m_nIDHelp == 0 || m_nIDHelp == nIDResource);

m_nIDHelp = nIDResource; // ID for help context (+HID_BASE_RESOURCE)

// parent must be MDI Frame (or NULL for default)

ASSERT(pParentWnd == NULL || pParentWnd->IsKindOf(RUNTIME_CLASS(CMDIFrameWnd)));

// will be a child of MDIClient

ASSERT(!(dwDefaultStyle & WS_POPUP));

dwDefaultStyle |= WS_CHILD;

// if available - get MDI child menus from doc template

CMultiDocTemplate* pTemplate;

if (pContext != NULL &&

(pTemplate = (CMultiDocTemplate*)pContext->m_pNewDocTemplate) != NULL)

{

ASSERT_KINDOF(CMultiDocTemplate, pTemplate);

// get shared menu from doc template

m_hMenuShared = pTemplate->m_hMenuShared;

m_hAccelTable = pTemplate->m_hAccelTable;

}

else

{

TRACE(traceAppMsg, 0, "Warning: no shared menu/acceltable for MDI Child window.\n");

// if this happens, programmer must load these manually

}

CString strFullString, strTitle;

if (strFullString.LoadString(nIDResource))

AfxExtractSubString(strTitle, strFullString, 0); // first sub-string

ASSERT(m_hWnd == NULL);

if (!Create(GetIconWndClass(dwDefaultStyle, nIDResource),

strTitle, dwDefaultStyle, rectDefault,

(CMDIFrameWnd*)pParentWnd, pContext))

{

return FALSE; // will self destruct on failure normally

}

// it worked !

return TRUE;

}

请问怎么会这样?

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航