Se o menu é estilo console, mesmo em GTWVG, o jeito é tradicional:
Usando Inkey() , pode-se detectar o click do mouse.
Usando MRow() e MCol() se verificam linha e coluna do mouse.
Fora isso, é ter a posição da área clicada, e comparar com MRow(), MCol()
Exemplo:
@ 1, 0 SAY "TESTE PARA CLICK"
DO WHILE nKey != K_ESC
nKey := Inkey(0)
IF nKey == K_LBUTTONDOWN
IF MRow() == 1 .AND. MCOL() >= 9 .AND> MCOL() <= 15
@ 15, 0 SAY "Foi cliclado
ENDIF
ENDIF
ENDDO
O texto "TESTE PARA CLICK" ocupa a linha 1, da coluna 0 até a coluna 15
Então, ao ser clicado o mouse, é testar se o click foi nessa região, linha 1, e colunas entre 0 e 15.
Lógico... se for fazer isso pra cada posição é muito fonte.
Melhor criar rotinas pra isso, por exemplo, um array contendo as coordenadas.
oPosicoes := { ;
{ 1, 0, 15, "A" } } // linha, coluna inicial, coluna final, keyboard pra simular
Depois na hora de analisar, comparar com os valores do array
IF nKey == K_LBUTTONDOWN
FOR nCont = 1 TO Len( oPosicoes )
IF MRow() == oPosicoes[ nCont, 1 ] .AND. MCol() >= oPosicoes[ nCont, 2 ] .AND. MCOL() <= oPosicoes[ nCont, 3 ]
KEYBOARD oPosicoes[ nCont, 4 ]
ENDIF
NEXT
ENDIF
É só um exemplo, fazendo isso na rotina que monta o visual do menu, a própria rotina pode montar o array de coordenadas.
Uso isso no menu que postei, inclusive ele vai passando as coordenadas de um submenu para o outro, que é justamente o que faz funcionar o click em qualquer lugar do menu.