最近有个项目 要将 一个 单文档的程序插入到一个 对话框程序中,想到将单文档程序做成ActiveX组件,然后在对话框程序中调用。做成的组件其他的都能显示 ,就是 菜单栏不能显示纠结啊有没有哪位大神知道怎么处理吗?
解决方案 »
- ListView控件中 用CImageList加载ICON图标为什么只能显示第一个图标
- 对话框上按钮?
- 原始套接字的问题???
- MFC虚函数调用的问题:当一个父类有多个子类,而且每个子类中都有一个与父类中函数名一样、参数类型个数都一样的函数...
- 怎么进行MODEM软件设计?高手赐教。
- 有关给CListCtrl加皮肤的问题
- 请问哪里有学习线程的教材和下载文档阿!
- 为何多个网页可以在一个端口输送?
- 用ATL做的DLL COM,由于在创建是没选Support MFC,但是在编程过程中又需要用到如CString等的MFC类库,但发觉在stdafx.h中包含MFC类库时提
- 浮动面板是怎么实现的,有没有代码?
- 不用鼠标和键盘,如何用代码实现视图框架中某一菜单激活弹出?
- 关于双缓冲绘图的要求问题
我在网上查了好多和我类似的问题,但是都没有给出可用的解决方法。
我是在框架文件的onCreate()函数中用
CMenu *pMenu=GetMenu();
pMenu->CheckMenuItem(IDM_TOOLBAR, MF_CHECKED);
pMenu->CheckMenuItem(IDM_VIEWBAR, MF_CHECKED);
pMenu->CheckMenuItem(IDM_STATUSBAR, MF_CHECKED);
使用菜单,调试的时候GetMenu()函数的返回值是0,getlasterror()提示说是子窗口没有菜单。但是如果只运行单文档的程序是没有问题的,做成ActiveX控件就出现上面的错误。
{ if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1; if (!m_wndMenuBar.CreateEx(this, TBSTYLE_FLAT ))
{
TRACE0("Failed to create Menubar ");
return -1; // fail to create
} m_wndMenuBar.SetSizes(CSize(30,20),CSize(1,1)); TBBUTTON button;
CString strItem;
CMenu mTopMenu;
mTopMenu.LoadMenu(IDR_MAINFRAME); UINT iPos;
for (iPos = 0; iPos<mTopMenu.GetMenuItemCount(); iPos++)
{ mTopMenu.GetMenuString(iPos, strItem, MF_BYPOSITION);
button.idCommand = iPos+1;
button.iBitmap = -1;
button.fsState = 0;
button.fsStyle = TBSTYLE_BUTTON;
button.iString = -1;
m_wndMenuBar.GetToolBarCtrl().InsertButton(iPos,&button);
m_wndMenuBar.SetButtonText(iPos,strItem);
} ////隐藏某个菜单项。
m_wndMenuBar.GetToolBarCtrl().HideButton(3); if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT ) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("未能创建工具栏\n");
return -1; // 未能创建
}
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() & ~CBRS_HIDE_INPLACE);
if (!m_wndReBar.Create(this) || !m_wndReBar.AddBar(&m_wndToolBar) )
{
TRACE0("未能创建 Rebar\n");
return -1; // 未能创建
}
m_wndReBar.SetBarStyle(m_wndReBar.GetBarStyle() & ~CBRS_HIDE_INPLACE); //// TODO: 如果不需要工具提示,则将此移除
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY); if (!m_wndStatusBar.Create(this))
{
TRACE0("未能创建状态栏\n");
return -1; // 未能创建
}
m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
return 0;
}void CMainFrame::OnMenu(UINT nID)
{ CMenu m_mnuTopMenu;
CRect rWindow,rButton; m_mnuTopMenu.LoadMenu(IDR_MAINFRAME);
UINT iPos; for (iPos = 0; iPos<m_mnuTopMenu.GetMenuItemCount(); iPos++)
{
if (iPos == nID-1)
{
m_wndMenuBar.GetWindowRect(&rWindow);
m_wndMenuBar.GetItemRect( iPos, &rButton);
rWindow.top += rButton.bottom;
rWindow.left += rButton.left;
m_wndMenuBar.GetToolBarCtrl().SetState(iPos+1,TBSTATE_PRESSED|TBSTATE_ENABLED); // show popup menu
m_mnuTopMenu.GetSubMenu(iPos)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,rWindow.left,rWindow.top,this);
m_wndMenuBar.GetToolBarCtrl().SetState(iPos+1,TBSTATE_ENABLED);
break;
}
}
}