Yesterday, 09:07
You could also test DC (example below shows) and CLICK returns 2 for double clicks. As for text windows, subclassing is a way (works with Graphic Windows too)
Text Window Subclassing:
Code:
FUNCTION PBMAIN () AS LONG
LOCAL hWin, ClickState, PosX, PosY AS LONG
GRAPHIC WINDOW NEW "Click test" , 400 , 200 , 300 , 200 TO hWin
GRAPHIC ATTACH hWin, 0
DO WHILE GRAPHIC(DC)
GRAPHIC WINDOW CLICK TO ClickState, PosX, PosY
SELECT CASE ClickState
CASE 1 : GRAPHIC CELL = 2,2 : GRAPHIC PRINT "Single Click " ; ClickState; PosX; PosY; " "
CASE 2 : GRAPHIC CELL = 2,2 : GRAPHIC PRINT "Double Click " ; ClickState; PosX; PosY; " "
END SELECT
SLEEP 1
LOOP
GRAPHIC WINDOW END
END FUNCTIONText Window Subclassing:
Code:
#COMPILE EXE
#DIM ALL
#IF %DEF(%PB_CC32) ' if to compile with PBCC, turn off console
#CONSOLE OFF
#ENDIF
%UNICODE = 1
#INCLUDE "WIN32API.INC"
GLOBAL oldProc AS DWORD
'====================================================================
FUNCTION PBMAIN () AS LONG
LOCAL hTWin AS LONG
TXT.WINDOW ("Click test", 100, 200, 15, 50) TO hTWin
oldProc = SetWindowLong(hTWin, %GWL_WNDPROC, CODEPTR(SubClassProc))
TXT.COLOR = %BLUE
TXT.CELL = 1, 2: TXT.PRINT "Click or double-click anywhere in this window"
TXT.CELL = 3, 2: TXT.PRINT "Press the Any-key to exit."
TXT.WAITKEY$
IF oldProc THEN ' remove subclassing before exit
SetWindowLong hTWin, %GWL_WNDPROC, oldProc
END IF
TXT.END
END FUNCTION '
'====================================================================
FUNCTION SubClassProc(BYVAL hWnd AS DWORD, BYVAL wMsg AS DWORD, _
BYVAL wParam AS DWORD, BYVAL lParam AS LONG) AS LONG
SELECT CASE AS LONG wMsg
CASE %WM_LBUTTONDOWN : TXT.CELL = 6, 2: TXT.PRINT "Single Click."
CASE %WM_LBUTTONDBLCLK : TXT.CELL = 6, 2: TXT.PRINT "Double Click."
END SELECT
FUNCTION = CallWindowProc(oldProc, hWnd, wMsg, wParam, lParam)
END FUNCTION