Re: Menu IDs
Dan Bloomquist wrote:
....
I don't know. Is this over kill? It does plug right in and I don't have
to change any existing code.
***
typedef unsigned long COMMANDID;
enum enumDynamicMenuIDs
{
ID_CH_SECTION,
};
AFX_STATIC_DATA struct RangeDynamicMenuIDs
{
enumDynamicMenuIDs id;
size_t size;
}
rangeDynamicMenuIDs[ ]=
{
{ ID_CH_SECTION, 25 },
};
class DynamicMenuIDs
{
public:
struct IDRange
{
IDRange( COMMANDID inLow, COMMANDID inHigh )
:start( inLow )
,end( inHigh )
{ }
COMMANDID start;
COMMANDID end;
};
std::vector< IDRange > ids;
DynamicMenuIDs( )
{
COMMANDID begin= ID_FIRST_DYNAMIC_MENU;
for( size_t i= 0; i < countof( rangeDynamicMenuIDs ); ++i )
{
ids.push_back( IDRange( begin, begin + rangeDynamicMenuIDs[ i ].size ) );
begin+= rangeDynamicMenuIDs[ i ].size;
ASSERT( begin < ID_LAST_DYNAMIC_MENU );
}
}
COMMANDID GetIDFirst( size_t menuid )
{
ASSERT( menuid < ids.size( ) );
return ids[ menuid ].start;
}
COMMANDID GetIDLast( size_t menuid )
{
ASSERT( menuid < ids.size( ) );
return ids[ menuid ].end;
}
};
//extern DynamicMenuIDs theMenuIDs;
DynamicMenuIDs theMenuIDs;
//this was a little much.....
//#define ON_COMMAND_RANGE_HEX( menuid, memberFxn ) \
// ON_COMMAND_RANGE( theMenuIDs.GetIDFirst( menuid ),
// theMenuIDs.GetIDLast( menuid ), memberFxn )
#define ID_FIRSTCH_SECTION theMenuIDs.GetIDFirst( ID_CH_SECTION )
#define ID_LASTCH_SECTION theMenuIDs.GetIDLast( ID_CH_SECTION )