Example 2

1) msg_aces.txt contains  (note not all of the entries are needed) ...      

USER %0d
%0d
#
#
USER %0s %1f
%0s %1f
#
#
USER %0f
%0f
#
#
USER %0f,%1f
%0f,%1f
#
#
USER %0f,%1f,%2f
%0f,%1f,%2f
#
#
USER %0f,%1f,%2f,%3f
%0f,%1f,%2f,%3f
#
#
USER %0s
%0s
#
#
USER -ACES
-ACES
#
#
USER -UserMenu
-UserMenu
#
#
USER -MainBtn1
-MainBtn1
#
#
USER New Button help.
New Button help.
#
#
USER -HoleHilite
-HoleHilite
#
#
USER -Hilite
-Hilite
#
#
USER -LoadData
-LoadData
#
#
USER -HiliteEdges
-HiliteEdges
#
#
USER -TotWeld
-TotWeld
#
#
USER -ToleranceCheck
-ToleranceCheck
#
#


2) Main file whatever.cpp contains ...

#include <string>
#include <fstream>
#include <iostream>
#include <vector>

using namespace std ;

extern "C"{
#define PRO_USE_VAR_ARGS
#include "ProToolkit.h"
#include <ProMenu.h>;
#include <ProMenuBar.h>
#include <ProWstring.h>
#include <ProModelitem.h>
#include <ProMessage.h>
#include <ProSolid.h>
#include <ProUtil.h>
#include <ProEdge.h>
#include <ProWindows.h>
#include <ProGeomitemdata.h>
int user_initialize();
void user_terminate();
}

ProFileName UserMsg;

ProMdl curobj;

static uiCmdAccessState TestAccessDefault(uiCmdAccessMode access_mode)
{
    return (ACCESS_AVAILABLE);
}

int HiliteAction()
{

  // some code ....
  return 0;
}

int HiliteEdges()
{
  // some code ....
  return 0;
}

int TotWeld()
{
  // some code ....
  return 0;
}

int LoadAction()
{
  // some code ....
  return 0;
}

/*====================================================================*\
FUNCTION : user_initialize()
PURPOSE  : Pro/DEVELOP standard initialize - define menu button
\*====================================================================*/
int user_initialize()
{
  uiCmdCmdId cmd_solve_id,cmd_display_id,cmd_hiliteedges_id,cmd_totweld_id;
    ProStringToWstring(UserMsg,"msg_aces.txt");
    ProMessageDisplay(UserMsg,"USER %0s","ACES add-ins loaded.");

/*----------------------------------------------------------------*\
    Add a new menu to the menu bar (to the left of Help).
\*----------------------------------------------------------------*/
    ProMenubarMenuAdd ("UserACES", "USER -ACES",
        "Help", PRO_B_FALSE, UserMsg);


/*----------------------------------------------------------------*\
    Add a sub menu to the new menu.
\*----------------------------------------------------------------*/

    ProMenubarmenuMenuAdd ("UserACES", "ToleranceCheck",
"USER -ToleranceCheck",NULL, PRO_B_TRUE, UserMsg);

/*----------------------------------------------------------------*\
    Fill in the buttons.
\*----------------------------------------------------------------*/

  // button 1 (Hilite) in ToleranceCheck submenu
  ProCmdActionAdd ("UserHiliteAction",
(uiCmdCmdActFn)HiliteAction,uiCmdPrioDefault, TestAccessDefault, PRO_B_TRUE,
PRO_B_TRUE, &cmd_solve_id);


    ProMenubarmenuPushbuttonAdd ("ToleranceCheck", "Hilite",
"USER -Hilite", "USER New Button help.", NULL, PRO_B_TRUE,    cmd_solve_id,
UserMsg);

  // button 2 (LoadData) in ToleranceCheck submenu
    ProCmdActionAdd ("UserLoadDataAction",
(uiCmdCmdActFn)LoadDataAction,uiCmdPrioDefault, TestAccessDefault, PRO_B_TRUE,
PRO_B_TRUE, &cmd_display_id);


    ProMenubarmenuPushbuttonAdd ("ToleranceCheck", "LoadData","USER -LoadData",
"USER New Button help.", NULL, PRO_B_TRUE, cmd_display_id, UserMsg);

/*----------------------------------------------------------------*\
    Add a button bellow TolernaceCheck which is ...
  Hilite edges that are bellow some critical edge (HiliteEdges)
\*----------------------------------------------------------------*/

  // create actions id
  ProCmdActionAdd ("UserHiliteEdges",
(uiCmdCmdActFn)HiliteEdges,uiCmdPrioDefault, TestAccessDefault, PRO_B_TRUE,
PRO_B_TRUE, &cmd_hiliteedges_id);

  // add this id to button
    ProMenubarmenuPushbuttonAdd ("UserACES", "HiliteEdges","USER -HiliteEdges",
"USER New Button help.", NULL, PRO_B_TRUE, cmd_hiliteedges_id, UserMsg);

/*----------------------------------------------------------------*\
    Add a button bellow HiliteEdges which is ...
  Select weldlines and return the total lenght (TotWeld)
\*----------------------------------------------------------------*/

  // create actions id
  ProCmdActionAdd ("UserTotWeld",
(uiCmdCmdActFn)TotWeld,uiCmdPrioDefault, TestAccessDefault, PRO_B_TRUE,
PRO_B_TRUE, &cmd_totweld_id);

  // add this id to button
    ProMenubarmenuPushbuttonAdd ("UserACES", "TotWeld","USER -TotWeld",
"USER New Button help.", NULL, PRO_B_TRUE, cmd_totweld_id, UserMsg);

 return (0);

}

/*====================================================================*\
FUNCTION : user_terminate()
PURPOSE  : To handle any termination actions
\*====================================================================*/
void user_terminate()
{
}