That's rather a programming question,
but I fear your void Solenoid(int Pin)
function won't work as is.
I understand you do not want to block your whole sketch with a delay ( that's why you use millis() )
Assuming it's called continuously, you'd have to tell when to trigger or how long it's already HIGH.
If you just call it to activate the solenoid, it will never go LOW.
You might create a small class to turn a trigger pulse into a fixed duration.
If you want, you can call that a Solenoid although it's a rather universal task.
unsigned int _duration;
unsigned long _tstart; // the millis() when triggered, or 0 when LOW
Solenoid (byte pin, unsigned int duration=250); // constructor, needs a pin number. Optional: activation duration in msec
void trigger(); // to be called to activate
void update(); // to be called regularly. Easiest solution to leave it to the user of this class, being responsible to call that once per instance.
That's just a possible definition. Implementation missing here, but usage should be rather clear.
Now you can expand it to some double pin ( "2 position double acting " ) class, asserting that only one of the two positions can be triggered at a time.