• MFC5动态更新窗体菜单1


    #include <afxwin.h>//必须加载此文件,该文件中定义了所有MFC相关的类
    #include "resource.h"
    
    class MyFrame:public CFrameWnd
    {
    private:
    	CMenu MainMenu,*SysMenu,*PopMenu,*SubMenu;
    	COLORREF color;
    public:
    	MyFrame()
    	{
    		Create(NULL,//产生标准窗口
    			"Menu",//窗口标题
    			WS_OVERLAPPEDWINDOW|WS_VISIBLE,//窗口样式
    			rectDefault,//窗口大小
    			NULL,//指向父窗口的指针
    			MAKEINTRESOURCE(IDR_SMENU)//使用菜单的标志
    			);
    		SysMenu = GetSystemMenu(FALSE);//取得系统菜单
    		SysMenu->AppendMenu(IDR_INSMENU,MF_SEPARATOR);
    		SysMenu->AppendMenu(MF_STRING|MF_CHECKED,IDR_INSMENU,"insert by me");
    		color = RGB(255,0,0);
    	}
    
    	afx_msg void OnSwitchMenu()
    	{
    		CMenu InsMenu;
    		InsMenu.LoadMenu(IDR_INSMENU);
    		MainMenu.LoadMenu(IDR_MAINMENU);
    		MainMenu.AppendMenu(MF_POPUP,(UINT)InsMenu.m_hMenu,"Color Menu");
    		SubMenu= MainMenu.GetSubMenu(1);
    		SubMenu->AppendMenu(MF_SEPARATOR);
    		SubMenu->InsertMenu(IDM_CreateItem,MF_BYCOMMAND|MF_STRING,IDM_InsertItem,"Insert a Item");
    		SubMenu->InsertMenu(IDM_CreateItem,MF_BYCOMMAND|MF_POPUP,(UINT)InsMenu.m_hMenu,"insert a sub menu");
    		//SetCheck();//设置应该被选择的菜单项
    		SubMenu->InsertMenu(IDM_CreateItem,MF_BYCOMMAND|MF_SEPARATOR);
    		InsMenu.Detach();//将菜单资源与菜单对象分离
    		SetMenu(&MainMenu);
    	}
    	DECLARE_MESSAGE_MAP()
    };
    
    BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)
    	ON_COMMAND(IDR_SwitchMenu,OnSwitchMenu)
    END_MESSAGE_MAP()
    
    class MyApp:public CWinApp
    {
    public:
    		BOOL InitInstance()
    		{
    			CFrameWnd *Frame = new MyFrame;
    			m_pMainWnd = Frame;
    			Frame->ShowWindow(SW_SHOW);
    			return true;
    		}
    } a_app;
    
    #define IDR_MAINMENU                    101
    #define IDR_SMENU                       102
    #define IDR_POPMENU                     103
    #define IDR_INSMENU                     104
    #define ID_RED                          40001
    #define ID_RED_GREEN                    40002
    #define ID_RED_BLUE                     40003
    #define ID_RED_BLACK                    40004
    #define IDM_CREATEITEM                  40005
    #define ID_FILE                         40005
    #define ID_DYNAMICMENU                  40006
    #define ID_Menu                         40007
    #define ID_DYNAMICMENU_INSERTASUBMENU   40008
    #define ID_COLORMENU                    40009
    #define ID_COLORMENU_RED                40010
    #define ID_COLORMENU_GREEN              40011
    #define ID_COLORMENU_BLUE               40012
    #define ID__POPITEM1                    40013
    #define ID__POPITEM2                    40014
    #define ID_FILE_EXIT                    40015
    #define IDR_SwitchMenu                  40016
    #define IDM_CreateItem                  40017
    #define IDM_InsertItem                  40018
    
  • 相关阅读:
    sun.misc.BASE64Encoder找不到jar包的解决方法
    mybatis中的#和$的区别
    mysql , oracle 从记录中查询出 楼盘下只有 no 公司的 楼盘
    Windows+Git+TortoiseGit+COPSSH 安装 教程
    oracle job 定时执行 存储过程
    如何在PL/SQL中修改ORACLE的字段顺序
    oracle创建数据库连接dblink
    oracle数据库去掉重复记录;只保留一条数据
    Oracle中like查询下划线等特殊字符的处理
    START WITH CONNECT BY PRIOR子句实现递归查询
  • 原文地址:https://www.cnblogs.com/liulun/p/1770952.html
Copyright © 2020-2023  润新知