Instead, you intercept %WM_VSCROLL (for %SBS_VERT controls) or %WM_HSCROLL (for %SBS_HORZ) controls in the dialog callback, just like you would do with normal applications
Code:
#COMPILE EXE #INCLUDE "WIN32API.INC" %SBSTEPS = 9 ' 9 unique STEP positions in the scrollbar %ID_SCROLL = 102 CALLBACK FUNCTION DlgCallback STATIC SI AS SCROLLINFO SELECT CASE CBMSG CASE %WM_INITDIALOG SI.cbSize = LEN(SI) SI.fMask = %SIF_ALL SI.nMin = 1 SI.nMax = 10 * %SBSTEPS ' 10 * 9 = 90 possible positions (1 to 90) SI.nPage = (SI.nMax - SI.nMin) / %SBSTEPS SI.nPos = (SI.nMax - SI.nMin) \ 2 CONTROL SEND CBHNDL, %ID_SCROLL, %SBM_SETSCROLLINFO, %FALSE, VARPTR(SI) CASE %WM_COMMAND IF CBCTLMSG = %BN_CLICKED THEN MSGBOX "You clicked a button! (Button ID=" & STR$(CBCTL) & ")" DIALOG END CBHNDL, 1 END IF CASE %WM_VSCROLL SELECT CASE LOWRD(CBWPARAM) CASE %SB_LINEDOWN INCR SI.nPos CASE %SB_PAGEDOWN SI.nPos = SI.nPos + Si.nPage CASE %SB_LINEUP DECR SI.nPos CASE %SB_PAGEUP SI.nPos = SI.nPos - Si.nPage CASE %SB_THUMBPOSITION, %SB_THUMBTRACK SI.nPos = HIWRD(CBWPARAM) CASE ELSE EXIT FUNCTION END SELECT ' Ensure range is correct SI.nPos = MAX&(Si.nMin, MIN&(SI.nPos, Si.nMax - Si.nPage + 1)) ' Update the scroll bar Si.fMask = %SIF_POS CONTROL SEND CBHNDL, %ID_SCROLL, %SBM_SETSCROLLINFO, %TRUE, VARPTR(Si) FUNCTION = 1 END SELECT END FUNCTION FUNCTION PBMAIN DIM hdlg AS LONG DIALOG NEW 0, "SCROLLBAR Test By Lance Edmonds",,, 200, 100, %WS_SYSMENU OR %WS_CAPTION TO hDlg CONTROL ADD BUTTON, hDlg, 100, "Button 1", 10, 10, 50, 14 CONTROL ADD BUTTON, hDlg, 101, "Button 2", 10, 31, 50, 14 CONTROL ADD SCROLLBAR, hDlg, %ID_SCROLL, "", 190, 0, 10, 100, %SBS_VERT OR %SBS_RIGHTALIGN DIALOG SHOW MODAL hDlg CALL DlgCallback END FUNCTION
------------------
Lance
PowerBASIC Support
mailto:[email protected][email protected]</A>
Leave a comment: