用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();
}