Вы также инициализировали rgnMain ?Несколько нелогично (но, как описано в документации для CombineRgn () ), область назначения / вывода должна существовать, чтобы получить требуемую комбинацию двух входных областей, но это может быть совершенно пустая область:
rgnMain := CreateRectRgn(0, 0, 0, 0);
if CombineRgn(rgnMain, rgn1, rgn2, RGN_OR) ... then
// etc
Если вы хотите избежать создания совершенно отдельной области, тогда допустимо и возможно указать одну из областей ввода в качестве области назначения (по определению область ввода должна быть существующей, действительной областьютаким образом, это избавляет от необходимости отдельно инициализировать новый регион назначения):
if CombineRgn(rgn1, rgn1, rgn2, RGN_OR) ... then
// etc