动态创建工具栏

根据配置文件中,对一些功能的描述,可以动态的创建一些子菜单,来实现程序的灵活配置。但是需要注意,当动态的创建后,重绘界面时,需要删除掉软件的注册表信息,才可以实时的显示正确的界面。

以下是示例代码:

//读工程目录下的tool.ini配置文件
    CString sPath = "";
    CMenu *pMenu = CMenu::FromHandle(m_wndMenuBar.GetDefaultMenu());
    CMenu *pToolMenu = pMenu->GetSubMenu(4);
    
    //菜单
    if (1 != pApp->m_bEnable) //配置
    {
        CMenu* pMeaTool = pMenu->GetSubMenu(3);
        if (pMeaTool) pMeaTool->DeleteMenu(ID_CAL_MPSS, MF_BYCOMMAND);
    }

    sPath.Format("%s\\tools.ini", pApp->m_sAppFounderPath);

    char pData[256];
    for (int i = 0; i < 3; i++)
    {
        CString strKey="";
        strKey.Format("tool%d", i);

        m_UserCommand[i].bEnable = GetPrivateProfileInt(strKey, "enable", 0, sPath);

        memset(pData, 0, 256);
        GetPrivateProfileString(strKey, "arguments", "", pData, 256, sPath);
        m_UserCommand[i].sArg = pData;

        memset(pData, 0, 256);
        GetPrivateProfileString(strKey, "command", "", pData, 256, sPath);
        m_UserCommand[i].sOrder = pData;

        memset(pData, 0, 256);
        GetPrivateProfileString(strKey, "directory", "", pData, 256, sPath);
        m_UserCommand[i].sDirPath = pData;

        memset(pData, 0, 256);
        
        GetPrivateProfileStringA(strKey, "menu", "", pData, 256, sPath);
        m_UserCommand[i].sMenuName.Format("%s",pData);

        m_UserCommand[i].nRelaDir = GetPrivateProfileInt(strKey, "reladir", 0, sPath);
    }

    BOOL bAdd = FALSE;

    if (m_UserCommand[0].bEnable==TRUE || m_UserCommand[1].bEnable == TRUE || m_UserCommand[2].bEnable == TRUE)
    {
        bAdd = pToolMenu->AppendMenuA(MF_SEPARATOR);
    }

    if (m_UserCommand[0].bEnable)
    {    
        bAdd = pToolMenu->AppendMenu(MF_STRING, ID_TOOL_USER1, TEXT(m_UserCommand[0].sMenuName.GetBuffer(0)));
    }

    if (m_UserCommand[1].bEnable)
    {
        bAdd = pToolMenu->AppendMenu(MF_STRING, ID_TOOL_USER2, TEXT(m_UserCommand[1].sMenuName.GetBuffer(0)));
    }

    if (m_UserCommand[2].bEnable)
    {
        bAdd = pToolMenu->AppendMenu(MF_STRING, ID_TOOL_USER3, TEXT(m_UserCommand[2].sMenuName.GetBuffer(0)));
    }

    DrawMenuBar();
    
//    m_wndMenuBar.CreateFromMenu(pMenu->GetSafeHmenu(), TRUE, TRUE);

    if (1 == pApp->m_bDeleteReg)
    {
        //删除注册表内容 可以实时更新界面的变化
        RegDeleteTree(HKEY_CURRENT_USER, "SOFTWARE\\inc\\摄影测量系统");
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值