Solved

Problem with Rectangular slide bar on scroll bar of list box

Posted on 1999-01-11
3
464 Views
Last Modified: 2013-11-20
hello All

I have two List Boxes of type ClistBox.  One of the listboxes is just for titles while the other contains the data and a horizontal scroll bar.  I am trying to move the titles in the title listbox when the user clicks onto the scroll bar of the data listbox. The horizontal scroll bar is working when the user clicks on the arrow of the scroll bar but DOES NOT work when the user click drags the rectangular slide bar on the scroll bar.  The code is as follows:

CListBox            m_ctlTitleList;
CBrowseList            m_ctlPatientList;

The CbrowseList class code is as follows:

// brwslist.cpp : implementation file
//

#include "StdAfx.h"
#include "Patient.h"
#include "BrwsList.h"

#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CBrowseList

CBrowseList::CBrowseList()
{
       m_ctlTitle = NULL;
}

CBrowseList::~CBrowseList()
{
}


BEGIN_MESSAGE_MAP(CBrowseList, CListBox)
      //{{AFX_MSG_MAP(CBrowseList)
      ON_WM_HSCROLL()
      //}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CBrowseList message handlers

void CBrowseList::SetTitle( CListBox* aControl )
{
      m_ctlTitle = aControl;
}

void CBrowseList::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
      /*if (nSBCode == SB_THUMBTRACK)
            return;*/

      if (m_ctlTitle)                   
            if ((nSBCode == SB_THUMBPOSITION) || (nSBCode == SB_THUMBTRACK)) {
                  m_ctlTitle->SetScrollPos( SB_HORZ, nPos, TRUE );
            } else
                  m_ctlTitle->SendMessage( WM_HSCROLL, MAKEWORD(nSBCode, nPos), NULL);
            
/*      if ((nSBCode == SB_THUMBTRACK) || (nSBCode == SB_ENDSCROLL))
            return;            // eat it
  */
      CListBox::OnHScroll(nSBCode, nPos, pScrollBar);
}

I look forward to a reply.

Best Regards


Asif
0
Comment
Question by:AsifMughal
  • 2
3 Comments
 

Expert Comment

by:asker
Comment Utility
When the ListControl receives a THUMBTRACK or THUMBPOSITION, it does not use their parameters (track position). Instead it calls GetScrollInfo with the flag set to TRACKPOS. In your case, the track pos of the real scroll bar for the second list is unchanged - that is why it does not scrolls even when receiving WM_*SCROLL messages.

You should use LVM_SCROLL messages.

Regards,
Asker.
0
 

Author Comment

by:AsifMughal
Comment Utility
Thanks for your reply.  I can't find any information on the GetScrollInfo and on the LVM_SCROLL message in any of the reference books. I would be grateful if you could send me some sample code or recommend any articles.

Thanks in advance

Asif

0
 

Accepted Solution

by:
asker earned 100 total points
Comment Utility
This is from the on-line help of VC++ 5.0 (but I think it should be avilable in any help or reference on Win32):

GetScrollInfo <Picture> <Picture> <Picture>

The GetScrollInfo function retrieves the parameters of a scroll bar, including the minimum and maximum scrolling positions, the page size, and the position of the scroll box (thumb).

BOOL GetScrollInfo(
HWND hwnd,  // handle of window with scroll bar
int fnBar, // scroll bar flag
LPSCROLLINFO lpsi // pointer to structure for scroll parameters
);

Parameters

hwnd

Identifies a scroll bar control or a window with a standard scroll bar, depending on the value of the fnBar parameter.

fnBar

Specifies the type of scroll bar for which to retrieve parameters. This parameter can be one of the following values:


Value

Meaning

SB_CTL

Retrieves the parameters for a scroll bar control. The hwnd parameter must be the handle of the scroll bar control.

SB_HORZ

Retrieves the parameters for the given window's standard horizontal scroll bar.

SB_VERT

Retrieves the parameters for the given window's standard vertical scroll bar.

lpsi

Points to a SCROLLINFO structure whose fMask member, upon entry to the function, specifies the scroll bar parameters to retrieve. Before returning, the function copies the specified parameters to the appropriate members of the structure.

The fMask member can be a combination of the following values:

Value

Meaning

SIF_PAGE

Copies the scroll page to the nPage member of the SCROLLINFO structure pointed to by lpsi.

SIF_POS

Copies the scroll position to the nPos member of the SCROLLINFO structure pointed to by lpsi.

SIF_RANGE

Copies the scroll range to the nMin and nMax members of the SCROLLINFO structure pointed to by lpsi.

Return Values

If the function retrieved any values, the return value is nonzero.

If the function does not retrieve any values, the return value is zero.

Remarks

The GetScrollInfo function enables applications to use 32-bit scroll positions. Although the messages that indicate scroll-bar position, WM_HSCROLL and WM_VSCROLL, provide only 16 bits of position data, the functions SetScrollInfo and GetScrollInfo provide 32 bits of scroll-bar position data. Thus, an application can call GetScrollInfo while processing either the WM_HSCROLL or WM_VSCROLL messages to obtain 32-bit scroll-bar position data.

The limitation on this technique applies to real-time scrolling of a window’s contents. An application implements real-time scrolling by processing the WM_HSCROLL or WM_VSCROLL messages that carry the SB_THUMBTRACK notification value, thereby tracking the position of the scroll box (thumb) as the user moves it. Unfortunately, there is no function to retrieve the 32-bit position scroll-box position as the user moves the scroll box. Because GetScrollInfo provides only the static position, an application can obtain only 32-bit position data before or after a scroll operation.

See Also

SCROLLINFO, SetScrollInfo, WM_HSCROLL, WM_VSCROLL

---------------------------

LVM_SCROLL <Picture> <Picture> <Picture>

The LVM_SCROLL message scrolls the content of a list view control. You can send this message explicitly or by using the ListView_Scroll macro.

LVM_SCROLL
wParam = (int) dx;  // amount of horizontal scrolling, in pixels or columns
lParam = (int) dy;  // amount of vertical scrolling, in pixels
 
Parameters

dx

Integer value that specifies the amount of horizontal scrolling.

If the view type of the list view control is icon view, small icon view, or report view, this value specifies the number of pixels to scroll. If the view type of the list view control is list view, this value specifies the number of columns to scroll.

dy

Integer value that specifies the amount of vertical scrolling.

If the view type of the list view control is icon view, small icon view, or list view, this value specifies the number of pixels to scroll. If the view type of the list view control is report view, this value specifies the number of lines to scroll.

Return Values

Returns TRUE if successful or FALSE otherwise.

See Also

ListView_Scroll

----------------------------------------

Hope this helps.

Asker.



0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

Suggested Solutions

Introduction: Finishing the grid – keyboard support for arrow keys to manoeuvre, entering the numbers.  The PreTranslateMessage function is to be used to intercept and respond to keyboard events. Continuing from the fourth article about sudoku. …
Introduction: Database storage, where is the exe actually on the disc? Playing a game selected randomly (how to generate random numbers).  Error trapping with try..catch to help the code run even if something goes wrong. Continuing from the seve…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now