Superclassing CListViewCtrl (ATL) 
Author Message
 Superclassing CListViewCtrl (ATL)

I have been trying to provide some changes to a CListViewCtrl via
superclassing in a WTL/ATL SDI application. The error returned during
the creation of the window is "class does not exist" error (error code
1411). Below is the code sample. Any suggestions on what is missing or
needed?

//////////////////////////////////////////////////////////////////////
class ListCtrl : public CWindowImpl<ListCtrl, CListViewCtrl>
{
public:
 ListCtrl();
 virtual ~ListCtrl();

public:
   BEGIN_MSG_MAP(ListCtrl)
      MESSAGE_HANDLER(WM_PAINT, OnPaint)
   END_MSG_MAP()

public:
 LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/);

//   DECLARE_WND_SUPERCLASS(_T("NewListCtrl"), GetWndClassName())
   static CWndClassInfo& GetWndClassInfo()
   {
      static CWndClassInfo wc = {
         {
            sizeof(WNDCLASSEX),
            0,
            StartWindowProc,
            0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW+1), NULL,
            _T("NewListCtrl"), NULL
         },
         GetWndClassName() , NULL, IDC_CROSS, TRUE, 0, _T("")
      };
      return wc;
   };

   static LPCTSTR GetWndClassName() { return _T("NewListCrtl"); };

Quote:
};

//////////////////////////////////////////////////////////////////////
HRESULT Status::open(const HWND hWnd)
{
   HRESULT hr = S_FALSE;

   if (list_view) {
      RECT rect;
      ::GetClientRect(hWnd, &rect);

      HWND h = list_view->Create(hWnd, rect,
ListCtrl::GetWndClassName(),
                                                   WS_CHILD        |
                                                   WS_VISIBLE      |
                                                   WS_CLIPSIBLINGS |
                                                   WS_CLIPCHILDREN |
                                                   LVS_REPORT,
                                                   WS_EX_CLIENTEDGE);
      if (!h) {
         UINT err = ::GetLastError();
         hr = E_FAIL;
      }
   }
   return hr;

Quote:
}



Sat, 27 Mar 2004 05:34:09 GMT  
 Superclassing CListViewCtrl (ATL)
For superclassing, the string right after WNDCLASSEX subobject in
CWndClassInfo is supposed to be the name of the class your class is based
on - WC_LISTVIEW in your case. GetWndClassName returns the new window class
name. You however specify the same name in both places.
--
With best wishes,
    Igor Tandetnik


Quote:
> I have been trying to provide some changes to a CListViewCtrl via
> superclassing in a WTL/ATL SDI application. The error returned during
> the creation of the window is "class does not exist" error (error code
> 1411). Below is the code sample. Any suggestions on what is missing or
> needed?

> //////////////////////////////////////////////////////////////////////
> class ListCtrl : public CWindowImpl<ListCtrl, CListViewCtrl>
> {
> public:
>  ListCtrl();
>  virtual ~ListCtrl();

> public:
>    BEGIN_MSG_MAP(ListCtrl)
>       MESSAGE_HANDLER(WM_PAINT, OnPaint)
>    END_MSG_MAP()

> public:
>  LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
> BOOL& /*bHandled*/);

> //   DECLARE_WND_SUPERCLASS(_T("NewListCtrl"), GetWndClassName())
>    static CWndClassInfo& GetWndClassInfo()
>    {
>       static CWndClassInfo wc = {
>          {
>             sizeof(WNDCLASSEX),
>             0,
>             StartWindowProc,
>             0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW+1), NULL,
>             _T("NewListCtrl"), NULL
>          },
>          GetWndClassName() , NULL, IDC_CROSS, TRUE, 0, _T("")
>       };
>       return wc;
>    };

>    static LPCTSTR GetWndClassName() { return _T("NewListCrtl"); };

> };

> //////////////////////////////////////////////////////////////////////
> HRESULT Status::open(const HWND hWnd)
> {
>    HRESULT hr = S_FALSE;

>    if (list_view) {
>       RECT rect;
>       ::GetClientRect(hWnd, &rect);

>       HWND h = list_view->Create(hWnd, rect,
> ListCtrl::GetWndClassName(),
>                                                    WS_CHILD        |
>                                                    WS_VISIBLE      |
>                                                    WS_CLIPSIBLINGS |
>                                                    WS_CLIPCHILDREN |
>                                                    LVS_REPORT,
>                                                    WS_EX_CLIENTEDGE);
>       if (!h) {
>          UINT err = ::GetLastError();
>          hr = E_FAIL;
>       }
>    }
>    return hr;
> }



Sat, 27 Mar 2004 07:43:34 GMT  
 Superclassing CListViewCtrl (ATL)
I redefined the GetWndClassName() to the Window Class the View is based on your
suggestion (see below). I now do not get an error, but the cursor remains as an
arrow, and there is still that flicker on resize. Is there a reason why the
DCPListCtrl window class structure is not used? I trace the Create statement to
verify that it is picking up GetWndClassName() = "DCPListCtrl"  ... I am at a
bit of a lost...

Thanks...

/*-----------------------------------------*/
static CWndClassInfo& GetWndClassInfo()
   {
      static CWndClassInfo wc = {
         {
            sizeof(WNDCLASSEX),
            0,
            StartWindowProc,
            0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW+1), NULL,
            _T("NewDCPListCtrl"), NULL
         },
         CListViewCtrl::GetWndClassName() , NULL, IDC_CROSS, TRUE, 0, _T("")
      };
      return wc;
   };

Quote:

> For superclassing, the string right after WNDCLASSEX subobject in
> CWndClassInfo is supposed to be the name of the class your class is based
> on - WC_LISTVIEW in your case. GetWndClassName returns the new window class
> name. You however specify the same name in both places.
> --
> With best wishes,
>     Igor Tandetnik



> > I have been trying to provide some changes to a CListViewCtrl via
> > superclassing in a WTL/ATL SDI application. The error returned during
> > the creation of the window is "class does not exist" error (error code
> > 1411). Below is the code sample. Any suggestions on what is missing or
> > needed?

> > //////////////////////////////////////////////////////////////////////
> > class ListCtrl : public CWindowImpl<ListCtrl, CListViewCtrl>
> > {
> > public:
> >  ListCtrl();
> >  virtual ~ListCtrl();

> > public:
> >    BEGIN_MSG_MAP(ListCtrl)
> >       MESSAGE_HANDLER(WM_PAINT, OnPaint)
> >    END_MSG_MAP()

> > public:
> >  LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
> > BOOL& /*bHandled*/);

> > //   DECLARE_WND_SUPERCLASS(_T("NewListCtrl"), GetWndClassName())
> >    static CWndClassInfo& GetWndClassInfo()
> >    {
> >       static CWndClassInfo wc = {
> >          {
> >             sizeof(WNDCLASSEX),
> >             0,
> >             StartWindowProc,
> >             0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW+1), NULL,
> >             _T("NewListCtrl"), NULL
> >          },
> >          GetWndClassName() , NULL, IDC_CROSS, TRUE, 0, _T("")
> >       };
> >       return wc;
> >    };

> >    static LPCTSTR GetWndClassName() { return _T("NewListCrtl"); };

> > };

> > //////////////////////////////////////////////////////////////////////
> > HRESULT Status::open(const HWND hWnd)
> > {
> >    HRESULT hr = S_FALSE;

> >    if (list_view) {
> >       RECT rect;
> >       ::GetClientRect(hWnd, &rect);

> >       HWND h = list_view->Create(hWnd, rect,
> > ListCtrl::GetWndClassName(),
> >                                                    WS_CHILD        |
> >                                                    WS_VISIBLE      |
> >                                                    WS_CLIPSIBLINGS |
> >                                                    WS_CLIPCHILDREN |
> >                                                    LVS_REPORT,
> >                                                    WS_EX_CLIENTEDGE);
> >       if (!h) {
> >          UINT err = ::GetLastError();
> >          hr = E_FAIL;
> >       }
> >    }
> >    return hr;
> > }



Sat, 27 Mar 2004 08:10:29 GMT  
 Superclassing CListViewCtrl (ATL)
If you look into the source code for AtlModuleRegisterWndClassInfoA, you
will see that it silently ignores cursor fields when doing superclass, for
reasons that escape me. Also, it overwrites all fields in WNDCLASSEX
structure, except class name and window proc address, with those from the
base window class. Your customizations get ignored.

So you have a number of options:

1. Manually preregister your superclass as part of app initialization.
CWindowImpl doesn't reregister the class that has already been registered.

2. Write your own implementation of Create method and register your class
there.

3. Forget about class customizations. Instead, handle WM_SETCURSOR (the only
message where default processing makes use of class cursor) and
WM_ERASEBKGND (the only message where default processing makes use of class
brush). If you handle those messages and never pass them to DefWindowProc,
the values in the window class do not affect behavior at all.

--
With best wishes,
    Igor Tandetnik


Quote:
> I redefined the GetWndClassName() to the Window Class the View is based on
your
> suggestion (see below). I now do not get an error, but the cursor remains
as an
> arrow, and there is still that flicker on resize. Is there a reason why
the
> DCPListCtrl window class structure is not used? I trace the Create
statement to
> verify that it is picking up GetWndClassName() = "DCPListCtrl"  ... I am
at a
> bit of a lost...

> Thanks...

> /*-----------------------------------------*/
> static CWndClassInfo& GetWndClassInfo()
>    {
>       static CWndClassInfo wc = {
>          {
>             sizeof(WNDCLASSEX),
>             0,
>             StartWindowProc,
>             0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW+1), NULL,
>             _T("NewDCPListCtrl"), NULL
>          },
>          CListViewCtrl::GetWndClassName() , NULL, IDC_CROSS, TRUE, 0,
_T("")
>       };
>       return wc;
>    };


> > For superclassing, the string right after WNDCLASSEX subobject in
> > CWndClassInfo is supposed to be the name of the class your class is
based
> > on - WC_LISTVIEW in your case. GetWndClassName returns the new window
class
> > name. You however specify the same name in both places.
> > --
> > With best wishes,
> >     Igor Tandetnik



> > > I have been trying to provide some changes to a CListViewCtrl via
> > > superclassing in a WTL/ATL SDI application. The error returned during
> > > the creation of the window is "class does not exist" error (error code
> > > 1411). Below is the code sample. Any suggestions on what is missing or
> > > needed?

> > > //////////////////////////////////////////////////////////////////////
> > > class ListCtrl : public CWindowImpl<ListCtrl, CListViewCtrl>
> > > {
> > > public:
> > >  ListCtrl();
> > >  virtual ~ListCtrl();

> > > public:
> > >    BEGIN_MSG_MAP(ListCtrl)
> > >       MESSAGE_HANDLER(WM_PAINT, OnPaint)
> > >    END_MSG_MAP()

> > > public:
> > >  LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
> > > BOOL& /*bHandled*/);

> > > //   DECLARE_WND_SUPERCLASS(_T("NewListCtrl"), GetWndClassName())
> > >    static CWndClassInfo& GetWndClassInfo()
> > >    {
> > >       static CWndClassInfo wc = {
> > >          {
> > >             sizeof(WNDCLASSEX),
> > >             0,
> > >             StartWindowProc,
> > >             0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW+1), NULL,
> > >             _T("NewListCtrl"), NULL
> > >          },
> > >          GetWndClassName() , NULL, IDC_CROSS, TRUE, 0, _T("")
> > >       };
> > >       return wc;
> > >    };

> > >    static LPCTSTR GetWndClassName() { return _T("NewListCrtl"); };

> > > };

> > > //////////////////////////////////////////////////////////////////////
> > > HRESULT Status::open(const HWND hWnd)
> > > {
> > >    HRESULT hr = S_FALSE;

> > >    if (list_view) {
> > >       RECT rect;
> > >       ::GetClientRect(hWnd, &rect);

> > >       HWND h = list_view->Create(hWnd, rect,
> > > ListCtrl::GetWndClassName(),
> > >                                                    WS_CHILD        |
> > >                                                    WS_VISIBLE      |
> > >                                                    WS_CLIPSIBLINGS |
> > >                                                    WS_CLIPCHILDREN |
> > >                                                    LVS_REPORT,
> > >                                                    WS_EX_CLIENTEDGE);
> > >       if (!h) {
> > >          UINT err = ::GetLastError();
> > >          hr = E_FAIL;
> > >       }
> > >    }
> > >    return hr;
> > > }



Sat, 27 Mar 2004 08:39:57 GMT  
 Superclassing CListViewCtrl (ATL)

Thanks.. I still have a few hairs left on my head <smile>.

Is this an undocumented "feature" or an undocument bug?

Thank you for the pointer...

    R

Quote:

> If you look into the source code for AtlModuleRegisterWndClassInfoA, you
> will see that it silently ignores cursor fields when doing superclass, for
> reasons that escape me. Also, it overwrites all fields in WNDCLASSEX
> structure, except class name and window proc address, with those from the
> base window class. Your customizations get ignored.

> So you have a number of options:

> 1. Manually preregister your superclass as part of app initialization.
> CWindowImpl doesn't reregister the class that has already been registered.

> 2. Write your own implementation of Create method and register your class
> there.

> 3. Forget about class customizations. Instead, handle WM_SETCURSOR (the only
> message where default processing makes use of class cursor) and
> WM_ERASEBKGND (the only message where default processing makes use of class
> brush). If you handle those messages and never pass them to DefWindowProc,
> the values in the window class do not affect behavior at all.

> --
> With best wishes,
>     Igor Tandetnik



> > I redefined the GetWndClassName() to the Window Class the View is based on
> your
> > suggestion (see below). I now do not get an error, but the cursor remains
> as an
> > arrow, and there is still that flicker on resize. Is there a reason why
> the
> > DCPListCtrl window class structure is not used? I trace the Create
> statement to
> > verify that it is picking up GetWndClassName() = "DCPListCtrl"  ... I am
> at a
> > bit of a lost...

> > Thanks...

> > /*-----------------------------------------*/
> > static CWndClassInfo& GetWndClassInfo()
> >    {
> >       static CWndClassInfo wc = {
> >          {
> >             sizeof(WNDCLASSEX),
> >             0,
> >             StartWindowProc,
> >             0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW+1), NULL,
> >             _T("NewDCPListCtrl"), NULL
> >          },
> >          CListViewCtrl::GetWndClassName() , NULL, IDC_CROSS, TRUE, 0,
> _T("")
> >       };
> >       return wc;
> >    };


> > > For superclassing, the string right after WNDCLASSEX subobject in
> > > CWndClassInfo is supposed to be the name of the class your class is
> based
> > > on - WC_LISTVIEW in your case. GetWndClassName returns the new window
> class
> > > name. You however specify the same name in both places.
> > > --
> > > With best wishes,
> > >     Igor Tandetnik



> > > > I have been trying to provide some changes to a CListViewCtrl via
> > > > superclassing in a WTL/ATL SDI application. The error returned during
> > > > the creation of the window is "class does not exist" error (error code
> > > > 1411). Below is the code sample. Any suggestions on what is missing or
> > > > needed?

> > > > //////////////////////////////////////////////////////////////////////
> > > > class ListCtrl : public CWindowImpl<ListCtrl, CListViewCtrl>
> > > > {
> > > > public:
> > > >  ListCtrl();
> > > >  virtual ~ListCtrl();

> > > > public:
> > > >    BEGIN_MSG_MAP(ListCtrl)
> > > >       MESSAGE_HANDLER(WM_PAINT, OnPaint)
> > > >    END_MSG_MAP()

> > > > public:
> > > >  LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
> > > > BOOL& /*bHandled*/);

> > > > //   DECLARE_WND_SUPERCLASS(_T("NewListCtrl"), GetWndClassName())
> > > >    static CWndClassInfo& GetWndClassInfo()
> > > >    {
> > > >       static CWndClassInfo wc = {
> > > >          {
> > > >             sizeof(WNDCLASSEX),
> > > >             0,
> > > >             StartWindowProc,
> > > >             0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW+1), NULL,
> > > >             _T("NewListCtrl"), NULL
> > > >          },
> > > >          GetWndClassName() , NULL, IDC_CROSS, TRUE, 0, _T("")
> > > >       };
> > > >       return wc;
> > > >    };

> > > >    static LPCTSTR GetWndClassName() { return _T("NewListCrtl"); };

> > > > };

> > > > //////////////////////////////////////////////////////////////////////
> > > > HRESULT Status::open(const HWND hWnd)
> > > > {
> > > >    HRESULT hr = S_FALSE;

> > > >    if (list_view) {
> > > >       RECT rect;
> > > >       ::GetClientRect(hWnd, &rect);

> > > >       HWND h = list_view->Create(hWnd, rect,
> > > > ListCtrl::GetWndClassName(),
> > > >                                                    WS_CHILD        |
> > > >                                                    WS_VISIBLE      |
> > > >                                                    WS_CLIPSIBLINGS |
> > > >                                                    WS_CLIPCHILDREN |
> > > >                                                    LVS_REPORT,
> > > >                                                    WS_EX_CLIENTEDGE);
> > > >       if (!h) {
> > > >          UINT err = ::GetLastError();
> > > >          hr = E_FAIL;
> > > >       }
> > > >    }
> > > >    return hr;
> > > > }



Sat, 27 Mar 2004 10:37:54 GMT  
 Superclassing CListViewCtrl (ATL)
ATL is very poorly documented. More often than not, I find myself browsing
through the sources.
--
With best wishes,
    Igor Tandetnik


Quote:

> Thanks.. I still have a few hairs left on my head <smile>.

> Is this an undocumented "feature" or an undocument bug?

> Thank you for the pointer...

>     R


> > If you look into the source code for AtlModuleRegisterWndClassInfoA, you
> > will see that it silently ignores cursor fields when doing superclass,
for
> > reasons that escape me. Also, it overwrites all fields in WNDCLASSEX
> > structure, except class name and window proc address, with those from
the
> > base window class. Your customizations get ignored.

> > So you have a number of options:

> > 1. Manually preregister your superclass as part of app initialization.
> > CWindowImpl doesn't reregister the class that has already been
registered.

> > 2. Write your own implementation of Create method and register your
class
> > there.

> > 3. Forget about class customizations. Instead, handle WM_SETCURSOR (the
only
> > message where default processing makes use of class cursor) and
> > WM_ERASEBKGND (the only message where default processing makes use of
class
> > brush). If you handle those messages and never pass them to
DefWindowProc,
> > the values in the window class do not affect behavior at all.

> > --
> > With best wishes,
> >     Igor Tandetnik



> > > I redefined the GetWndClassName() to the Window Class the View is
based on
> > your
> > > suggestion (see below). I now do not get an error, but the cursor
remains
> > as an
> > > arrow, and there is still that flicker on resize. Is there a reason
why
> > the
> > > DCPListCtrl window class structure is not used? I trace the Create
> > statement to
> > > verify that it is picking up GetWndClassName() = "DCPListCtrl"  ... I
am
> > at a
> > > bit of a lost...

> > > Thanks...

> > > /*-----------------------------------------*/
> > > static CWndClassInfo& GetWndClassInfo()
> > >    {
> > >       static CWndClassInfo wc = {
> > >          {
> > >             sizeof(WNDCLASSEX),
> > >             0,
> > >             StartWindowProc,
> > >             0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW+1), NULL,
> > >             _T("NewDCPListCtrl"), NULL
> > >          },
> > >          CListViewCtrl::GetWndClassName() , NULL, IDC_CROSS, TRUE, 0,
> > _T("")
> > >       };
> > >       return wc;
> > >    };


> > > > For superclassing, the string right after WNDCLASSEX subobject in
> > > > CWndClassInfo is supposed to be the name of the class your class is
> > based
> > > > on - WC_LISTVIEW in your case. GetWndClassName returns the new
window
> > class
> > > > name. You however specify the same name in both places.
> > > > --
> > > > With best wishes,
> > > >     Igor Tandetnik



> > > > > I have been trying to provide some changes to a CListViewCtrl via
> > > > > superclassing in a WTL/ATL SDI application. The error returned
during
> > > > > the creation of the window is "class does not exist" error (error
code
> > > > > 1411). Below is the code sample. Any suggestions on what is
missing or
> > > > > needed?

//////////////////////////////////////////////////////////////////////

- Show quoted text -

Quote:
> > > > > class ListCtrl : public CWindowImpl<ListCtrl, CListViewCtrl>
> > > > > {
> > > > > public:
> > > > >  ListCtrl();
> > > > >  virtual ~ListCtrl();

> > > > > public:
> > > > >    BEGIN_MSG_MAP(ListCtrl)
> > > > >       MESSAGE_HANDLER(WM_PAINT, OnPaint)
> > > > >    END_MSG_MAP()

> > > > > public:
> > > > >  LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM
/*lParam*/,
> > > > > BOOL& /*bHandled*/);

> > > > > //   DECLARE_WND_SUPERCLASS(_T("NewListCtrl"), GetWndClassName())
> > > > >    static CWndClassInfo& GetWndClassInfo()
> > > > >    {
> > > > >       static CWndClassInfo wc = {
> > > > >          {
> > > > >             sizeof(WNDCLASSEX),
> > > > >             0,
> > > > >             StartWindowProc,
> > > > >             0, 0, NULL, NULL, NULL, (HBRUSH)(COLOR_WINDOW+1),
NULL,
> > > > >             _T("NewListCtrl"), NULL
> > > > >          },
> > > > >          GetWndClassName() , NULL, IDC_CROSS, TRUE, 0, _T("")
> > > > >       };
> > > > >       return wc;
> > > > >    };

> > > > >    static LPCTSTR GetWndClassName() { return _T("NewListCrtl"); };

> > > > > };

//////////////////////////////////////////////////////////////////////

- Show quoted text -

Quote:
> > > > > HRESULT Status::open(const HWND hWnd)
> > > > > {
> > > > >    HRESULT hr = S_FALSE;

> > > > >    if (list_view) {
> > > > >       RECT rect;
> > > > >       ::GetClientRect(hWnd, &rect);

> > > > >       HWND h = list_view->Create(hWnd, rect,
> > > > > ListCtrl::GetWndClassName(),
> > > > >                                                    WS_CHILD
|
> > > > >                                                    WS_VISIBLE
|
> > > > >                                                    WS_CLIPSIBLINGS
|
> > > > >                                                    WS_CLIPCHILDREN
|
> > > > >                                                    LVS_REPORT,

WS_EX_CLIENTEDGE);
> > > > >       if (!h) {
> > > > >          UINT err = ::GetLastError();
> > > > >          hr = E_FAIL;
> > > > >       }
> > > > >    }
> > > > >    return hr;
> > > > > }



Sat, 27 Mar 2004 22:54:40 GMT  
 Superclassing CListViewCtrl (ATL)
Hi,

Using Clistviewctrl in ATL, you need to include ATLControls.h. It is in the
ATLCON sample included with Visual C++. For detailed information, you can
refer to this article:

Q223439 HOWTO: Using Class Wrappers to Access Windows Common Controls in ATL
http://support.microsoft.com/support/kb/articles/q223/4/39.asp

Thanks,
Freist

P.S. This posting is provided "AS IS" with no warranties, and confers no
rights. You assume all risk for your use.  2001 Microsoft Corporatioin. All
rights reserved.



Thu, 01 Apr 2004 03:20:40 GMT  
 
 [ 7 post ] 

 Relevant Pages 

1. CListViewCtrl and DragAndDrop

2. WTL CListViewCtrl

3. Superclassing a control

4. Change Image in CListViewCtrl

5. Flicker during resize in CListViewCtrl

6. OnPaint override on CListViewCtrl?

7. WTL & CListViewCtrl

8. Superclassing constructors of a subclass?

9. Superclassing "Edit", bombs on WIN95

10. Subclassing and superclassing

11. Deleting Selected items in CListViewCtrl

12. CListViewCtrl

 

 
Powered by phpBB® Forum Software