首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

用SetMenuInfo函数改变菜单栏色彩无效

2013-01-23 
用SetMenuInfo函数改变菜单栏颜色无效代码在CDPlayerDlg::OnInitDialog里://添加菜单栏CMenu menumenu.Lo

用SetMenuInfo函数改变菜单栏颜色无效
代码在CDPlayerDlg::OnInitDialog里:


//添加菜单栏
CMenu menu;
menu.LoadMenu(IDR_MENU1);
SetMenu(&menu);
//修改菜单栏颜色
m_brush.Detach();
m_brush.CreateSolidBrush(m_color);
MENUINFO mi;
mi.cbSize=sizeof(MENUINFO);
mi.fMask=MIM_BACKGROUND;
mi.hbrBack=(HBRUSH)m_brush;
int result=SetMenuInfo((HMENU)(menu.m_hMenu),&mi);
menu.Detach();//去掉这句可以让菜单栏变色,但是其他函数要GetMenu()所以。。

试过多种方法,把menu定义成成员变量,去掉menu.Detach()无效,用CMenu指针也无效,希望大家给点意见。
[解决办法]
把menu定义成成员变量是必须的
另外你的画刷是不是忘记创建了?
[解决办法]
改成函数:
int CDlgHasToolBarDlg::SetMenuBackColor(DWORD color)
{
//#define WINVER 0x0500  //为 Windows98 和 Windows 2000 及更新版本改变为适当的值。
if(m_MenuBrush.m_hObject)
{
m_MenuBrush.DeleteObject();
}
m_MenuBrush.CreateSolidBrush(color);//RGB(255,128,128));
MENUINFO mi;
mi.cbSize=sizeof(MENUINFO);
mi.fMask=MIM_BACKGROUND;
mi.hbrBack=(HBRUSH)m_MenuBrush;
return SetMenuInfo((HMENU)(m_wndMenu.m_hMenu),&mi);
}
//调用:
void CDlgHasToolBarDlg::OnOK() 
{
// TODO: Add extra validation here
static BOOL sw=FALSE;
if(sw) SetMenuBackColor(RGB(255,128,128));
else    SetMenuBackColor(RGB(128,255,128));
SendMessage(WM_NCPAINT,0,0);
sw=!sw;
// 菜单在 非客户区
//CDialog::OnOK();
}

热点排行