FIX: Sending WM_xSCROLL Message Causes Invalid ASSERT (147684)
The information in this article applies to:
- The Microsoft Foundation Classes (MFC), when used with:
- Microsoft Visual C++, 32-bit Editions 4.0
This article was previously published under Q147684 SYMPTOMS
Forcing a window to scroll to an absolute location by sending it a
WM_HSCROLL or WM_VSCROLL message with the SB_THUMBPOSITION or SB_THUMBTRACK
scrolling codes might cause an assertion. The assertion is in Wincore.cpp
file on line 1938.
CAUSE
The assertion tries to ensure that for the current message, the nTrackPos
member of the SCROLLINFO structure retrieved from a call to ::GetScrollInfo
is the same as the thumb position specified in the message. The value of
this variable is retrieved by calling ::GetScrollInfo, and it reflects the
current scroll thumb position only when the user is dragging the thumb. In
the case of a programmatically sent scroll message with the
SB_THUMBPOSITION code, this value is not valid. Because this value is
indeterminate, it will not likely match the thumb position specified in the
message, and the assertion will fail.
Also, even if the assertion is ignored, the WM_xSCROLL message handler will
be called with an invalid scroll position when the WM_xSCROLL message is
sent programmatically.
RESOLUTION
If the assertion is ignored, you cannot rely on the position value passed
to the WM_xSCROLL handler and must make a call to GetCurrentMessage() to
get the values specified in the message instead. If this is done properly,
then the assertion can be safely ignored.
For more information on this, please refer to the sample code included in
this article.
If the assertion occurs too often to manually select 'Ignore' in the
assertion failure message box, you can programmatically turn off assertion
failures with the following code:
#ifdef _DEBUG
int nPrevMode = _CrtSetReportMode(_CRT_ASSERT,0);
#endif
// Code that causes the assertion, for example:
// SendMessage(WM_VSCROLL,...)
#ifdef _DEBUG
_CrtSetReportMode(_CRT_ASSERT,nPrevMode);
#endif
STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed
at the beginning of this article. This problem was corrected in Visual C++,
32-bit Edition, version 4.1.
Modification Type: | Major | Last Reviewed: | 10/17/2003 |
---|
Keywords: | kbBug kbfix kbNoUpdate KbUIDesign kbVC410fix KB147684 |
---|
|