No evento init da sua classe grid vc pode inserir um código deste tipo:
LOCAL oCol
FOR EACH oCol IN THIS.COLUMNS
IF TYPE('oCol.Header1')='O'
oCol.REMOVEOBJECT('Header1')
oCol.NEWOBJECT('Header1','Header_indexa','Header_indexa.prg')
ENDIF
oCol = .NULL.
ENDFOR
Neste caso estou substituindo o comportamento do evento click por um contido no Header_indexa.prg
(indexar automaticamente o resultado do CA), este prg é uma nova classe que o header de cada coluna ira responder ao evento click, no seu caso use o evento RightClick como procedimento no código.
Vejá esta é apenas uma forma de fazer, e somente um exemplo...
No meu exemplo, a parte superior me permite determinar que classe com respectivo procedimento eu desejo definir p/ o objeto na grade.
A parte inferior é parte de um código de exemplo p/ o evento click p/ uma grade.
DEFINE CLASS Header_indexa AS HEADER
PROCEDURE CLICK
LOCAL nome_cursor, nome_coluna, nrecno, nome_grade
nrecno = IIF(EOF() OR BOF(),1,RECNO())
nome_coluna = THIS.PARENT.CONTROLSOURCE
nome_coluna = SUBSTR(nome_coluna,AT('.',nome_coluna) + 1)
nome_cursor = SUBSTR(nome_coluna,1,AT('.',nome_coluna) -1)
nome_grade = THIS.PARENT.PARENT.NAME
IF TAGCOUNT(nome_cursor) > 0
FOR nCount = 1 TO 30
IF !EMPTY(TAG(nCount))
IF UPPER(TAG(nCount)) = UPPER(nome_coluna)
DO CASE
CASE UPPER(JUSTSTEM(THIS.PICTURE)) = "UP"
SET ORDER TO TAG nome_coluna DESCENDING
CASE UPPER(JUSTSTEM(THIS.PICTURE)) = "DOWN"
SET ORDER TO TAG nome_coluna ASCENDING
ENDCASE
THIS.PARENT.PARENT.REFRESH
GOTO nrecno
EXIT
ENDIF
ENDIF
ENDFOR
ENDIF
ENDPROC
ENDDEFINE
Espero que ajude...
[], s
Peter