Du kannst die ID nachträglich nicht ändern (zumindest kenne ich keinen Weg, und würde es auch in deinem Fall nicht machen).
Was du machen kannst, ist z.B. eine map<> zu verwenden, in der du die diversen Flags einer ID zuordnest.
Beim Erstellen vergibst du die IDs dann so dass du alle "relevanten" Controls auseinanderhalten kannst, also normalerweise bekommt jedes Control eine eigene ID. (Manchmal vergibt man Controls die bloss "zierde" sind keine eigene ID, sondern verwendet eine einzige "Zier-Control-ID" für alle solchen Controls.)
Dann kannst du anhand der ID auf diese Flags zugreifen, und die Flags auch ändern. Beispiel:
std::map<int, int> g_flagsByControlID;
void InitializeDialog()
{
// ...
g_flagsByControlID[IDC_OK_BUTTON] = 123;
g_flagsByControlID[IDC_CANCEL_BUTTON] = 42;
// ...
}
void Foo()
{
int controlID = ...;
int flags = g_flagsByControlID[controlID]; // Flags lesen
if (...)
{
g_flagsByControlID[controlID] = flags | 8; // Flags ändern
}
}