Vale, de acuerdo. Pero aun así, creo que podrías hacer algo como esto: en la función main llamas a una función que cree la interfaz y que la muestre. En la interfaz tienes el switch, de acuerdo, pero en cada case llamas a una función distinta (una que limpie la pantalla, una que introduzca los números, una que haga lo de las funciones de la calculadora, etc). Por ejemplo, te reescribo la parte de los números ("" en los parámetros title y text indican ventana activa):
Func agregar_caracter($control, $caracter)
; Agrega un caracter a un control de la ventana activa.
ControlSetText("", "", $control, ControlGetText("", "", $control) & $caracter)
EndFunc
Vale, estupendo, tenemos una función para agregar un caracter, y ahora cómo usamos el array $Anums para añadir el caracter al cuadro? Así:
Case $aNums[0] To $aNums[17]
For $I = 0 To UBound($aNums)
If $idMsg = $aNums[$I] Then
agregar_caracter("Edit1", ControlGetText($hGUI, "", $aNums[$I]))
EndIf
Next
Y ya. De hecho, ya que sabemos (por el case) que $IdMSG es un número, no nos podríamos ahorrar un for y un if? No he probado esto, pero... igual funciona y todo.
Case $aNums[0] To $aNums[17]
agregar_caracter("Edit1", ControlGetText($hGUI, "", $idMsg))
Yo creo que así queda más limpio y más explicativo.