CWnd derived class in ATL object

I have a control that I've written with MFC, and I would like to make it accessible to VB (and anything else) as an ActiveX control.  I knocked out a demo ATL object (never used it before now), but I can't work out how to host my CWnd derived control within the ActiveX control.

Could I have some advice about a strategy to do this - I don't really want detailed example code (although a few pointers would be nice).  
LVL 4
IainHereAsked:
Who is Participating?
 
ShaunWildeCommented:
CWindow is the ATL eqivalent of MFCs CWnd so yes use CWindow if you want to go ATL only - however ATL dlls can also use MFC in them quite easily (use the wizard options)

then create an ATL object - I generally use Full Control - and base the control on CEdit (this member object is normally replaced by my custom window) the generated code will then provide you with mosty of the hooks to get going eg you create you window in the OnCreate method
0
 
IainHereAuthor Commented:
BTW:  I don't want to use the MFC ActiveX control wizard - I want to write this control using ATL (as a learning exercise), but I need to learn how to do it.  For instance, should I derive my control from CWindow instead of CWnd, and how would this help me house it.  What problems am I likely to encounter?

Thanks.
0
 
IainHereAuthor Commented:
OK.  Using the CEdit method, I want to replace the member control that is the edit with my own control:

     CContainedWindow m_ctlEdit;
     

     CMyControl() :    
          m_ctlEdit(_T("Edit"), this, 1)
     {
          m_bWindowOnly = TRUE;
     }

I guess I replace this code with:

     CContainedWindow m_ctlMine;   etc...
     
But how do I get the "LPTSTR lpszClassName" for the CContainedWindow constructor?  How do I find out what that is - do I have to register the class with something?

Thanks.
0
Cloud Class® Course: SQL Server Core 2016

This course will introduce you to SQL Server Core 2016, as well as teach you about SSMS, data tools, installation, server configuration, using Management Studio, and writing and executing queries.

 
ShaunWildeCommented:
I'd try just replacing it completely ? eg use CMyWindow rather than CContaindWindow
0
 
IainHereAuthor Commented:
OK, that sounds good, but I need to pass a CWnd* to the Create() function in my control (which is of course passed on to the CWnd::Create() function).

Do you know how I would get that from the control I've made in the way you describe above?

>(this member object is normally replaced by my custom window)

I guess you have this problem too, or do you do something else?
0
 
ShaunWildeCommented:
CWindow or CWnd ?? use the HWND and pass that around -

what does your control look like? - just .h file will suffice - it might speed thingsup :)
0
 
IainHereAuthor Commented:
Thanks for the help Shaun.  To be honest, after having spent a bit longer looking at these things, I've decided to write it as an MFC ActiveX control for now.

Perhaps I'll have time to do the ATL thing another day :-)
0
 
ShaunWildeCommented:
:)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.