Subclassing an OLE control
Ramachandra Rao -- chandu@ampersand.soft.net
Tuesday, July 02, 1996
Environment : VC++ 4.0 WindowsNT 3.51
Hi
I want to trap the scroll bar event of a grid( OLE control) for which
I am subclassing the grid. Here is my code
In MyDialog.h
{
CMyWnd mywnd; // CMyWnd is a class derived from CWnd
}
BOOL CMyDialog::OnInitDialog()
{
mywnd.SubClassDlgItem(IDC_GRID1, this); // IDC_GRID1 is my grid id
CDialog::OnInitDialog();
}
GetDlgItem(pParent->m_hWnd, nID) is returning NULL . The control id
is correct and it belongs to the same dialog. It works fine with the
windows controls but not with the OLE controls( grid ).So does that
have any implications?
If so, how do I subclass an OLE control.?
Thanks everyone
Chandu
David.Lowndes@bj.co.uk
Monday, July 08, 1996
[Mini-digest: 2 responses]
> I want to trap the scroll bar event of a grid( OLE control) for which
>I am subclassing the grid. Here is my code
>
>In MyDialog.h
>{
> CMyWnd mywnd; // CMyWnd is a class derived from CWnd
>}
>
>BOOL CMyDialog::OnInitDialog()
>{
> mywnd.SubClassDlgItem(IDC_GRID1, this); // IDC_GRID1 is my grid id
> CDialog::OnInitDialog();
>}
>
>
>
> GetDlgItem(pParent->m_hWnd, nID) is returning NULL .
Chandu,
I don't know if this is the answer to your problem, but I think you're trying
to use "mywnd" before it's been initialised by the DDX. Try this instead.
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
mywnd.SubClassDlgItem(IDC_GRID1, this); // IDC_GRID1 is my grid id
}
Dave Lowndes
-----From: "John Elsbree"
Chandu -
True, ::GetDlgItem will return NULL, because the hwnd of the control may not
actually have an ID of IDC_GRID1. Because it's an OLE control, it chooses for
itself what its own ID will be, regardless of what's in the dialog template.
There's no OLE interface through which a container to can the ID of the
control, so it doesn't.
However, the container does maintain its own copy of what it thinks the ID
should be (based on what was in the dialog template). That's why the remainder
of the code in SubclassDlgItem (the stuff inside the #ifndef
_AFX_NO_OCC_SUPPORT) exists. Have you traced through that code?
John ("not speaking for Microsoft") Elsbree
| Вернуться в корень Архива
|