Resource DLLs is the recommended way to do this, but if you have reasons to not want to use those, constructing the resource IDs in code is not impossible.
The ID's in resource.h are integers, and refering to them as e.g. IDS_STRING_OK_BUTTON_ENG can only be done at compile time. However you could do something like this.
resource.h:
#define IDS_STRING_OK_BUTTON_ENG 100
#define IDS_STRING_EXIT_BUTTON_ENG 101
#define IDS_STRING_OK_BUTTON_FRA 200
#define IDS_STRING_EXIT_BUTTON_FRA 201
.rc file:
STRINGTABLE
BEGIN
IDS_STRING_OK_BUTTON_ENG "OK"
IDS_STRING_EXIT_BUTTON_ENG "Exit"
IDS_STRING_OK_BUTTON_FRA "D'accord"
IDS_STRING_EXIT_BUTTON_FRA "Sortie"
END
And then refer to the ID's as the English ID + a language dependent offset. In this example the offset for French would be 100.