My practice is similar to what Jon states. The vast majority of the enums and constant are obviously tied to a particular class or module and are declared public in there.
The lowest level of my software is called Utility and contains math routines and other functions and method of general utility (rather than specific utility to that application's mode). In there is a module that has as a bunch of function that just are utility functions/subroutines that have no common theme. It is in that one area that any enums or constant go.
There is a similar area for the application model where utilities that are of general use for that application go. And that where constants that can't be tied to any one class of the MODEL go.
So there three areas where constant can be found in my personal framework
The class declarations
The general utility module of the application model
The general utility module of the utility assembly.
In practice only a handful out of dozens of enum and constant ever needed to be declared in either utility modules. Most of those are Win32 decelerations used by Win32 function that are imported into my assembly.