Kbase 19504: WIN32 API - How to Remove ScrollBars from a Window or Frame
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  07/02/2000 |
|
The following code came from a customer and has not been verified by Progress Software. This code will remove scrollbars from a window or frame.
PROCEDURE GetWindowLongA EXTERNAL "USER32.DLL":
DEFINE INPUT PARAMETER hwnd AS LONG.
DEFINE INPUT PARAMETER nindex AS LONG.
DEFINE RETURN PARAMETER result AS LONG.
END PROCEDURE.
PROCEDURE SetWindowLongA EXTERNAL "USER32.DLL":
DEFINE INPUT PARAM hwnd AS LONG.
DEFINE INPUT PARAM nindex AS LONG.
DEFINE INPUT PARAM newlong AS LONG.
END PROCEDURE.
FUNCTION FlBitTest
RETURNS LOGICAL (IiNumber AS INTEGER , IiBitNo AS INTEGER):
/* Tests bit number given and returns TRUE if its set, FALSE */
/* if not set. */
/* Note: Bits are number from RHS of byte starting at 0 for */
/* right-most bit. */
/* Divide by 2^Bitno to move the bit we're interested in to */
/* bit 0. */
DEFINE VARIABLE ViMoved AS INTEGER NO-UNDO.
ViMoved = TRUNC(IiNumber / EXP(2,IiBitNo), 0).
/* Now check if odd or even */
RETURN (ViMoved MODULO 2) = 1.
END FUNCTION.
PROCEDURE PRemoveHScroll:
/* Removes Horizontal Scrollbar from a Window/Frame */
/* This can be used when VWidth = Width but there is still a */
/* horizontal scrollbar because VHeight <> Height. */
/* NOTE: The code below looks strange but its the only way I */
/* could get the API call to work. */
DEFINE INPUT PARAMETER IhFrame AS HANDLE NO-UNDO.
DEFINE VARIABLE IiHwnd AS INTEGER NO-UNDO.
DEFINE VARIABLE ViWL AS INTEGER NO-UNDO.
IiHwnd = IhFrame:HWND.
&SCOPED-DEFINE ws_hscroll 1048576
&SCOPED-DEFINE ws_hscroll_bitno 20
RUN GetWindowLongA (IhFrame:HWND,-16,OUTPUT ViWL).
IF NOT FlBitTest(ViWL,{&ws_hscroll_bitno}) THEN
RETURN.
ViWL = ViWL - {&ws_hscroll}.
RUN SetWindowLongA (IhFrame:HWND,-16,ViWL).
IhFrame:HEIGHT-PIXELS = IhFrame:HEIGHT-PIXELS - 1.
RUN GetWindowLongA (IhFrame:HWND,-16,OUTPUT ViWL).
ViWL = ViWL - {&ws_hscroll}.
RUN SetWindowLongA (IhFrame:HWND,-16,ViWL).
IhFrame:HEIGHT-PIXELS = IhFrame:HEIGHT-PIXELS + 1.
END PROCEDURE.