The MASM Forum Archive 2004 to 2012

General Forums => The Campus => Topic started by: georgek01 on January 15, 2007, 11:31:40 AM

Title: ScrollBar handle of ListView control
Post by: georgek01 on January 15, 2007, 11:31:40 AM
Hello!

I need to get the handle of the scrollbars (vertical and horizontal) of a ListView control. I've been through the API documentation (Platform SDK: ms-help://MS.PSDKSVR2003R2.1033/shellcc/platform/commctls/scrollbars/scrollbars.htm (http://ms-help://MS.PSDKSVR2003R2.1033/shellcc/platform/commctls/scrollbars/scrollbars.htm)) and cannot find a means to do this.

Any suggestions will be greatly appreciated!
Title: Re: ScrollBar handle of ListView control
Post by: TNick on January 15, 2007, 11:43:03 AM
Hello, georgek01!
I don't know how scroll bars are implemented in ListView, but, if I would write (and I will :) such a control, I would implement scroll bars at creation time as standard scroll bars and not as stand alone controls. Anyway, this is what win32.hlp tells us about WM_HSCROLL's  lParam:
Quote from: win32.hlp
hwndScrollBar

Value of lParam. Identifies the control if WM_HSCROLL is sent by a scroll bar control. If WM_HSCROLL is sent by a window's standard scroll bar, hwndScrollBar is not used.
Same thing with vertical scroll bars.

If you tell us why you need it, maybe will find another way than using the handle...

Regards,
Nick
Title: Re: ScrollBar handle of ListView control
Post by: georgek01 on January 15, 2007, 12:13:22 PM
Hello Nick,

Thanks for the response.

I've sub-classed the ListView control and use the WM_MOUSELEAVE message to check when the mouse has left the control. If the mouse moves over the header and scrollbars, this message is also sent - therefore, the user is unable to scroll because my code hides the ListView once the mouse is not over it any more.

I'd like to separately subclass the scrollbars so I can check their message que for mouse events, thus providing a means to determine if the mouse is still "inside" the ListView.

Regards, George


Title: Re: ScrollBar handle of ListView control
Post by: TNick on January 15, 2007, 12:56:39 PM
Here is a quick solution, but it has to be tested, 'cause I don't know if WM_NCHITTEST will work. So, in your WM_MOUSELEAVE you can do this


INVOKE GetCursorPos, ADDR APointStruct
mov      eax,APointStruct.x
mov      ecx, APointStruct.y
shl        ecx, 16
mov      cx, ax
INVOKE  SendMessage, hWnd, WM_NCHITTEST,0,ecx


if eax=HTVSCROLL or whatever you are interested in, then don't hide the window (see the WM_NCHITTEST documentation)

I am really curious if this works...  :dazzled:

Nick


[later]
If it doesn't work like this (and even if it does) you may try to replace the SendMessage function with DefWindowProc
INVOKE DefWindowProc, hWnd, WM_NCHITTEST,0,ecx