显示窗口时的是IDR_EYETYPE,当关闭所有子窗口才显示IDR_MAINFRAME菜单
但如何得到IDR_EYETYPE的句柄或对象?
((CChildFrame*)this->GetActiveFrame())->GetMenu();
CMenu::FromHandle(::GetMenu(GetSafeHwnd()));
等等。。结果都得不到。全是指向个CTempMenu东西,貌似只能改变IDR_MAINFRAME菜单
我的目的是重绘MDI*菜单。。比如背景什么的。。
谢谢
11 个解决方案
#1
就用AfxGetMainWnd()->GetMenu()就可以了啊。
#2
AfxGetMainWnd()-> GetMenu()我也试过
还是得不到啊,这也只能得到IDR_MAINFRAME
还是得不到啊,这也只能得到IDR_MAINFRAME
#3
*菜单重绘不好搞,一般的办法是把菜单放到CReBar上来实现菜单栏背景重绘,网上例子也较多
#4
那你就公用一个菜单资源吧
#5
公用一个菜单资源也是不行的,改变类型什么的也只改的了主菜单
现在正在看CDocTemplate,CMultiDocTemplate类还有runtime_class宏。。。我想这里面应该就是关键了
CReBar可以吗?是先销毁原有菜单然后再自己创建?SDI的好改,直接就能得到菜单,网上我也只找到SDI的例子。。
To: Y__Y 现在你有例子吗?我实在没找到。有就给我个例子好吗?qzlbeyond@163.com 谢谢
#6
网上只有SDI的,在MDI里完全无效
#7
http://www.codeproject.com/KB/menus/menubarxp.aspx
#8
感谢Y__Y提供的例子,可我想重绘的是*菜单的菜单条,不是Pop-up Menu。
并且网上大多是单文档的例子,单文档GetMenu就可以的到并重绘。MDI却有两个Menu, 当关闭子窗口时,主窗口的菜单才显示。
而GetMenu都只能得到主窗口的菜单。
MDI:
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_EYETYPE, //打开MDI有子窗口时显示的菜单IDR_EYETYPE
RUNTIME_CLASS(CEyeDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CEyeView));
AddDocTemplate(pDocTemplate);
// create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) //关闭所有子窗口显示的菜单IDR_MAINFRAME
return FALSE;
m_pMainWnd = pMainFrame;
深入浅出里面大致讲了以上内容。
CMultiDocTemplate public: CDocTemplate
...
CFrameWnd* CDocTemplate::CreateNewFrame(CDocument *pDoc, CFrameWnd *pOther)
{
...
pFrame->LoadFrame(m_nIDResource,WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, &context)
...
return pFrame;
}
难道我需要重写个继承CMultiDocTemplate 类才行吗?
并且网上大多是单文档的例子,单文档GetMenu就可以的到并重绘。MDI却有两个Menu, 当关闭子窗口时,主窗口的菜单才显示。
而GetMenu都只能得到主窗口的菜单。
MDI:
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_EYETYPE, //打开MDI有子窗口时显示的菜单IDR_EYETYPE
RUNTIME_CLASS(CEyeDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CEyeView));
AddDocTemplate(pDocTemplate);
// create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) //关闭所有子窗口显示的菜单IDR_MAINFRAME
return FALSE;
m_pMainWnd = pMainFrame;
深入浅出里面大致讲了以上内容。
CMultiDocTemplate public: CDocTemplate
...
CFrameWnd* CDocTemplate::CreateNewFrame(CDocument *pDoc, CFrameWnd *pOther)
{
...
pFrame->LoadFrame(m_nIDResource,WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, &context)
...
return pFrame;
}
难道我需要重写个继承CMultiDocTemplate 类才行吗?
#9
补充一下,我想重绘MDI*菜单的菜单条
#10
UP
#11
..........
#1
就用AfxGetMainWnd()->GetMenu()就可以了啊。
#2
AfxGetMainWnd()-> GetMenu()我也试过
还是得不到啊,这也只能得到IDR_MAINFRAME
还是得不到啊,这也只能得到IDR_MAINFRAME
#3
*菜单重绘不好搞,一般的办法是把菜单放到CReBar上来实现菜单栏背景重绘,网上例子也较多
#4
那你就公用一个菜单资源吧
#5
公用一个菜单资源也是不行的,改变类型什么的也只改的了主菜单
现在正在看CDocTemplate,CMultiDocTemplate类还有runtime_class宏。。。我想这里面应该就是关键了
CReBar可以吗?是先销毁原有菜单然后再自己创建?SDI的好改,直接就能得到菜单,网上我也只找到SDI的例子。。
To: Y__Y 现在你有例子吗?我实在没找到。有就给我个例子好吗?qzlbeyond@163.com 谢谢
#6
网上只有SDI的,在MDI里完全无效
#7
http://www.codeproject.com/KB/menus/menubarxp.aspx
#8
感谢Y__Y提供的例子,可我想重绘的是*菜单的菜单条,不是Pop-up Menu。
并且网上大多是单文档的例子,单文档GetMenu就可以的到并重绘。MDI却有两个Menu, 当关闭子窗口时,主窗口的菜单才显示。
而GetMenu都只能得到主窗口的菜单。
MDI:
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_EYETYPE, //打开MDI有子窗口时显示的菜单IDR_EYETYPE
RUNTIME_CLASS(CEyeDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CEyeView));
AddDocTemplate(pDocTemplate);
// create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) //关闭所有子窗口显示的菜单IDR_MAINFRAME
return FALSE;
m_pMainWnd = pMainFrame;
深入浅出里面大致讲了以上内容。
CMultiDocTemplate public: CDocTemplate
...
CFrameWnd* CDocTemplate::CreateNewFrame(CDocument *pDoc, CFrameWnd *pOther)
{
...
pFrame->LoadFrame(m_nIDResource,WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, &context)
...
return pFrame;
}
难道我需要重写个继承CMultiDocTemplate 类才行吗?
并且网上大多是单文档的例子,单文档GetMenu就可以的到并重绘。MDI却有两个Menu, 当关闭子窗口时,主窗口的菜单才显示。
而GetMenu都只能得到主窗口的菜单。
MDI:
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_EYETYPE, //打开MDI有子窗口时显示的菜单IDR_EYETYPE
RUNTIME_CLASS(CEyeDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CEyeView));
AddDocTemplate(pDocTemplate);
// create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) //关闭所有子窗口显示的菜单IDR_MAINFRAME
return FALSE;
m_pMainWnd = pMainFrame;
深入浅出里面大致讲了以上内容。
CMultiDocTemplate public: CDocTemplate
...
CFrameWnd* CDocTemplate::CreateNewFrame(CDocument *pDoc, CFrameWnd *pOther)
{
...
pFrame->LoadFrame(m_nIDResource,WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, &context)
...
return pFrame;
}
难道我需要重写个继承CMultiDocTemplate 类才行吗?
#9
补充一下,我想重绘MDI*菜单的菜单条
#10
UP
#11
..........