FIX: ActiveX Control Fails to Fire Click Event (161872)
The information in this article applies to:
- Microsoft Visual C++, 32-bit Enterprise Edition 4.2
- Microsoft Visual C++, 32-bit Professional Edition 4.2
This article was previously published under Q161872 SYMPTOMS
If you create an ActiveX control that subclasses a button, you may find
that the control doesn't fire a "click" event. You can observe this
behavior by running the BUTTON sample included with Visual C++ 4.2.
CAUSE
There is a bug in the COleControl::OnLButtonUp() function.
CWnd::OnLButtonUp() should be called within the function before calling
COleControl::ButtonUp().
RESOLUTION
You can work around the problem by trapping the WM_LBUTTONUP message
in your control. Copy the code from the OnLButtonUp() function located in
\MSDEV\MFC\SRC\CTLEVENT.CPP and place it into your new handler. Move the
call to CWnd::OnLButtonUp() before the call to ButtonUp() so that the new
function looks like the following:
void CYourButtonCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
HWND hWndSave = m_hWnd;
CWnd::OnLButtonUp(nFlags, point); // moved the call here
ButtonUp(LEFT_BUTTON, nFlags, point);
if (m_hWnd != hWndSave)
return;
if (m_bInPlaceActive && !m_bUIActive && m_bPendingUIActivation &&
(GetFocus() == this || IsChild(GetFocus())))
{
m_bPendingUIActivation = FALSE;
OnActivateInPlace(TRUE, NULL);
}
}
STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed
at the beginning of this article. This bug was corrected in Visual C++
version 4.2b.
REFERENCES
For more information about Visual C++ 4.2b, please see the following
article in the Microsoft Knowledge Base:
156934 PATCH: Visual C++ 4.2b Patch
| Modification Type: | Major | Last Reviewed: | 10/24/2003 |
|---|
| Keywords: | kbBug kbfix kbfix KB161872 |
|---|
|