PRB: MFC Subclassed Static Control Does Not Work in VB5
ID: Q186472
|
The information in this article applies to:
-
Microsoft Visual Basic Learning, Professional, and Enterprise Editions for Windows, version 5.0
-
The Microsoft Foundation Classes (MFC), included with:
-
Microsoft Visual C++, 32-bit Editions, version 5.0
SYMPTOMS
When an MFC control that subclasses a Static Window class is placed on a
Visual Basic form, two unexpected behaviors occur:
- The MFC ActiveX control does not respond to Windows messages, such as
WM_LBUTTONDOWN.
- When you double-click the control while the Visual Basic client is in
run-time mode, the control's Property Page dialog box appears.
RESOLUTION
To work around this problem, add a message handler for WM_NCHITTEST:
- Open the Control Workspace (.dsw) file in Developer Studio.
- Use the Class wizard to add a message handler for WM_NCHITTEST. Edit the
code to return HTCLIENT. Change your code to look like the following:
UINT CMySubClCtrl::OnNcHitTest(CPoint point)
{
// TODO: Add your message handler code here and/or call default.
//Return COleControl::OnNcHitTest(point);
return HTCLIENT;
}
- Rebuild the control.
STATUS
Microsoft is researching this problem and will post new information here in
the Microsoft Knowledge Base as it becomes available.
MORE INFORMATIONSteps to Reproduce Behavior
- Create an ActiveX Control with the MFC ActiveX Control Wizard. Select
the STATIC Window class to subclass.
- Use the Class wizard to add a message handler for WM_LBUTTONDOWN. Change
your code to look like the following:
void CMySubClCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
AfxMessageBox("StaticSubclass");
COleControl::OnLButtonDown(nFlags, point);
}
- Build this control.
- Launch Visual Basic and create a new Standard EXE project.
- Click Components on the Project menu and select the ActiveX Control you
just created.
- Place the ActiveX control on Form1.
- Run the project.
- Click the ActiveX control. Notice that no MessageBox appears and that if
you double-click the control, the control's property page appears.
NOTE: In step 1, if the EDIT Window class is subclassed instead of
the STATIC Window class, the MFC ActiveX control works as expected. The
information in this article is specific to the STATIC Window class.
Additional query words:
kbActiveX kbCtrl kbCtrlCreate kbinterop kbMFC kbVBp500 kbVC500 kbDSupport kbDSD
Keywords : kbGrpVB
Version : WINDOWS:5.0,97; WINNT:
Platform : WINDOWS winnt
Issue type : kbprb
|