Hi,
I got the below code work with single scroll bar,
but if I want to have the other one at the same windows
It can't, I try to understand the example in Petzold, but
it too difficult for me! I just don,t know how to tell the
%WM_HScroll to indentify which one is in control.
Anybody can help with some source add to this? Many Thank.
#REGISTER NONE
#COMPILE EXE
#INCLUDE "win32api.inc"
%IDC_SCROLL = 100
%IDC_TEXT = 101
%My_MIN = 20
%My_MAX = 3000
%My_STEP = 10
%My_INITIAL = 440
DECLARE CALLBACK FUNCTION DlgProc
FUNCTION PBMAIN
LOCAL hDlg AS LONG
DIALOG NEW 0, "",,, 278, 44, %DS_MODALFRAME OR %DS_CENTER OR %WS_POPUP OR %WS_CAPTION OR %WS_SYSMENU TO hDlg
CONTROL ADD "SCROLLBAR", hDlg, %IDC_SCROLL, "", 7, 7, 262, 11, %WS_CHILD OR %SBS_HORZ OR %WS_VISIBLE
CONTROL ADD LABEL, hDlg, %IDC_TEXT, "", 47,24,27,12, %SS_CENTERIMAGE OR %SS_SUNKEN
DIALOG SHOW MODAL hDlg CALL DlgProc
END FUNCTION
CALLBACK FUNCTION DlgProc
STATIC hwndScroll AS LONG
STATIC X AS SINGLE
LOCAL iDummy AS LONG
LOCAL i AS LONG
SELECT CASE CBMSG
CASE %WM_INITDIALOG
CONTROL HANDLE CBHNDL, %IDC_SCROLL TO hwndScroll
SetScrollRange hwndScroll, %SB_CTL, %My_MIN*%My_STEP, %My_MAX*%My_STEP, %FALSE
SetScrollPos hwndScroll, %SB_CTL, %My_INITIAL*%My_STEP, %TRUE
CONTROL SET TEXT CBHNDL, %IDC_TEXT, FORMAT$(%My_INITIAL)
X = %My_INITIAL
CASE %WM_HSCROLL
SELECT CASE LOWRD(CBWPARAM)
CASE %SB_LINELEFT : X = 2 ^ (-1 / 12 ) * X
CASE %SB_LINERIGHT : X = 2 ^ ( 1 / 12 ) * X
CASE %SB_PAGELEFT : X = X / 2
CASE %SB_PAGERIGHT : X = X * 2
CASE %SB_THUMBTRACK : X = HIWRD(CBWPARAM)/%My_STEP
CASE %SB_TOP : GetScrollRange hwndScroll, %SB_CTL, CLNG(X*%My_STEP), iDummy
CASE %SB_BOTTOM : GetScrollRange hwndScroll, %SB_CTL, CLNG(X*%My_STEP), iDummy
END SELECT
X = MAX(%My_MIN, MIN(%My_MAX, X))
SetScrollPos hwndScroll, %SB_CTL, CLNG(X*%My_STEP), %TRUE
CONTROL SET TEXT CBHNDL, %IDC_TEXT, FORMAT$( X,"#.#")
END SELECT
END FUNCTION
I got the below code work with single scroll bar,
but if I want to have the other one at the same windows
It can't, I try to understand the example in Petzold, but
it too difficult for me! I just don,t know how to tell the
%WM_HScroll to indentify which one is in control.
Anybody can help with some source add to this? Many Thank.
#REGISTER NONE
#COMPILE EXE
#INCLUDE "win32api.inc"
%IDC_SCROLL = 100
%IDC_TEXT = 101
%My_MIN = 20
%My_MAX = 3000
%My_STEP = 10
%My_INITIAL = 440
DECLARE CALLBACK FUNCTION DlgProc
FUNCTION PBMAIN
LOCAL hDlg AS LONG
DIALOG NEW 0, "",,, 278, 44, %DS_MODALFRAME OR %DS_CENTER OR %WS_POPUP OR %WS_CAPTION OR %WS_SYSMENU TO hDlg
CONTROL ADD "SCROLLBAR", hDlg, %IDC_SCROLL, "", 7, 7, 262, 11, %WS_CHILD OR %SBS_HORZ OR %WS_VISIBLE
CONTROL ADD LABEL, hDlg, %IDC_TEXT, "", 47,24,27,12, %SS_CENTERIMAGE OR %SS_SUNKEN
DIALOG SHOW MODAL hDlg CALL DlgProc
END FUNCTION
CALLBACK FUNCTION DlgProc
STATIC hwndScroll AS LONG
STATIC X AS SINGLE
LOCAL iDummy AS LONG
LOCAL i AS LONG
SELECT CASE CBMSG
CASE %WM_INITDIALOG
CONTROL HANDLE CBHNDL, %IDC_SCROLL TO hwndScroll
SetScrollRange hwndScroll, %SB_CTL, %My_MIN*%My_STEP, %My_MAX*%My_STEP, %FALSE
SetScrollPos hwndScroll, %SB_CTL, %My_INITIAL*%My_STEP, %TRUE
CONTROL SET TEXT CBHNDL, %IDC_TEXT, FORMAT$(%My_INITIAL)
X = %My_INITIAL
CASE %WM_HSCROLL
SELECT CASE LOWRD(CBWPARAM)
CASE %SB_LINELEFT : X = 2 ^ (-1 / 12 ) * X
CASE %SB_LINERIGHT : X = 2 ^ ( 1 / 12 ) * X
CASE %SB_PAGELEFT : X = X / 2
CASE %SB_PAGERIGHT : X = X * 2
CASE %SB_THUMBTRACK : X = HIWRD(CBWPARAM)/%My_STEP
CASE %SB_TOP : GetScrollRange hwndScroll, %SB_CTL, CLNG(X*%My_STEP), iDummy
CASE %SB_BOTTOM : GetScrollRange hwndScroll, %SB_CTL, CLNG(X*%My_STEP), iDummy
END SELECT
X = MAX(%My_MIN, MIN(%My_MAX, X))
SetScrollPos hwndScroll, %SB_CTL, CLNG(X*%My_STEP), %TRUE
CONTROL SET TEXT CBHNDL, %IDC_TEXT, FORMAT$( X,"#.#")
END SELECT
END FUNCTION
Comment