397上位机VC MFC实现菜单动态透明效果
实现菜单动态透明效果
功能展示
鼠标右键弹出的菜单都是灰白色,有时我们想进行美化菜单,实现界面美化。我们当前例程就实现菜单的美化,效果如图,鼠标右键会弹出美化的菜单,菜单当前设置有两种主题,主题1比较漂亮,菜单会动态透明的显示;
要点提示
主要是通过定义的类CBaseMenu实现菜单的透明动态效果,类的使用与VC自带的Cmenu类相似:
1.定义一实例CBaseMenu m_FageMenu;加载菜单资源m_FageMenu.LoadMenu(IDR_FAGEMENU);
2.鼠标操作弹出菜单m_FageMenu.TrackPopMenu( pt.x, pt.y,GetSafeHwnd());
3.关联菜单项对应的处理函数,实现自己想要的功能;
4.程序退出时释放菜单,调用m_FageMenu.FreeMenu();
实现功能
1.新建基于对话框的应用程序
2.复制例程根目录菜单类的四个文件DrawGraphics.cxx,DrawGraphics.hxx, BaseMenu.cxx, BaseMenu.hxx到自己工程根目录,并载入到工程。
3.在主对话框类包含菜单类头文件#include “BaseMenu.hxx”,添加实例变量CBaseMenu m_FageMenu;并在程序初始化时载入事先准备好的菜单资源ID,如例程准备的菜单ID为IDR_FAGEMENU。
m_FageMenu.LoadMenu(IDR_FAGEMENU); 程序退出时清理菜单即调用m_FageMenu.FreeMenu();
4.添加鼠标右键函数,弹出菜单
void CGkbc8Dlg::OnRButtonUp(UINT nFlags, CPoint point)
{
CPoint pt(point);
ClientToScreen( &pt );
m_FageMenu.TrackPopMenu( pt.x, pt.y,GetSafeHwnd());
CDialog::OnRButtonUp(nFlags, point);
}
5.关联菜单项的处理函数,或直接添加对话框类的WindowProc()函数,统一处理
LRESULT CGkbc8Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch( message )
{
case WM_COMMAND:
switch ( LOWORD( wParam ) )
{
case ID_REGEDIT:
AfxMessageBox("点击了注册表项");
break;
case ID_SEPERATOR://set item to seperator
m_FageMenu.SetMenuState(ID_SEPERATOR, MF_SEPARATOR, MF_BYCOMMAND );
break;
case ID_ADDMENUITEM: //add item
m_FageMenu.InsertMenu(m_FageMenu.GetMenuItemCount()-1, "工控编程吧添加",
ID_DELMENUITEM,IDR_MAINFRAME );
m_FageMenu.SetMenuState( ID_DELMENUITEM, MF_ENABLED, MF_BYCOMMAND );
break;
case ID_DELMENUITEM:// clear all added items
while ( m_FageMenu.DeleteMenu( ID_DELMENUITEM, MF_BYCOMMAND ) );
m_FageMenu.SetMenuState( ID_DELMENUITEM,
m_FageMenu.GetMenuState( ID_DELMENUITEM, MF_BYCOMMAND )|MF_GRAYED, MF_BYCOMMAND );
break;
case ID_EXIT:// exit program
PostMessage(WM_CLOSE,0,0);
break;
}
}
return CDialog::WindowProc(message, wParam, lParam);
}
6.菜单的 主题当前例程公实现两个,大家可以再次编辑菜单类CBaseMenu,实现更多的主题效果。可调用m_FageMenu.SelectMenuTheme(0);//仅0-1 来实现主题的设置
我们来演示下功能实现的整个过程
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|