Make a ActiveX from a CWnd class

I made a CWnd class tha it work in a Custom Control. Now i want to made an ActiveX with that class.

Do I have to rewrite most of the code????

There is a way to create that CWnd class inside the COleControl class and capture all message like OnLButtonDown.

Please do a example.


PD: Sorry for my english. :)
Who is Participating?
Roshan DavisConnect With a Mentor Commented:
1). Do *NOTHING* in the function "OnDraw"
2). Comment all  the code that already created by the wizard like pDC->Ellipse() something like that
3). If your class is derived from CWnd, you need to create that window using "Create()" function
Put that create function code in your ActiveX control's OnCreate something like
make DumClass object as the class member of CUserManagerCtrl
in "UserManagerCtl.h", declare
DumClass m_oDumClass;

int CActiveXControlCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
      if (COleControl::OnCreate(lpCreateStruct) == -1)
            return -1;

      m_oDumClass.Create(NULL, "", WS_CHILD | WS_VISIBLE, CRect(0, 0, 20, 20), this, 1234);

      return 0;

And in your OnSize function (that you have to map WM_SIZE using class wizard(Ctrl+W))

void CActiveXControlCtrl::OnSize(UINT nType, int cx, int cy)
      COleControl::OnSize(nType, cx, cy);

      if( ::IsWindow(m_oDumClass.m_hWnd) )
            m_oDumClass.MoveWindow(0, 0, cx, cy);      

Good Luck
Roshan DavisCommented:
>> Now i want to made an ActiveX with that class
You mean, u already created an ActiveX and want to load thru CWnd?
Rosh :)
DAEAuthor Commented:
No, I not create the activex because I'm looking for an easy way to create that CWnd class in to a activex.

Like subclassing or something like that.

But maybe load thru CWnd it what i want, what is load thru CWnd?

Cloud Class® Course: Python 3 Fundamentals

This course will teach participants about installing and configuring Python, syntax, importing, statements, types, strings, booleans, files, lists, tuples, comprehensions, functions, and classes.

Roshan DavisCommented:
1). File Menu->New
2). Select MFC ActiveXControl Wizard
3). Select the Path for the Project and Enter a Name
4). Click "OK"
5). Press Next
6). Press Finish

Now you will get a new ActiveX Project, you can place the code that in the CWnd in the main class (a class

with Ctl siffix eg: CYourAxCtl.cpp,CYourAxCtl.h)

Is that what u need?

This link also give some idea about creating an ActiveX - Creating an ActiveX button from a MFC owner-draw


Try these links also, this will give some ActiveX tutorials  by Kapil Chaturvedi. by Navin Kohli.

Good Luck
DAEAuthor Commented:
No, is not what i need.

For example. I made a CWnd derived class called DumClass.

Wend i start a new activex proyect, I have to create that class in the constructor like:

DumClass Test = new DumClass();

And then in the OnDraw event put some thing like this:

void CActiveXControlCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
       Test->Draw(pdc, rcBounds)

But my question is, there is other way to do this more easy. For example put some thing in the event PreCreateWindows?????????????????

Thanks roshmon for you dedication.
DAEAuthor Commented:
Yes, thats what i want. But it doesn´t works.

m_oDumClass don't draw, and
if( ::IsWindow(m_oDumClass.m_hWnd)) is FALSE.

In the original proyect than i want to pass to activex. I put a Custom Control in a CDialog, and then put :

void CTestDlg::DoDataExchange(CDataExchange* pDX)
      DDX_Control(pDX, IDC_CUSTOMCONTROL, m_oDumClass);

And it work excellent.

I'm burning my brain here.

roshmon we are in the right path.

Roshan DavisCommented:
What that "Create" function returns..?
- m_oDumClass.Create(NULL, "", WS_CHILD | WS_VISIBLE, CRect(0, 0, 20, 20), this, 1234);

Rosh :)

Roshan DavisCommented:
In your class "DumClass", is there any "Create" function ?
If yes, use that function instead of the above
DAEAuthor Commented:
The function "Create" returns 1.
DAEAuthor Commented:
There is no overload create function in the class.
Roshan DavisCommented:
>> m_oDumClass don't draw, and
>> if( ::IsWindow(m_oDumClass.m_hWnd)) is FALSE.

Check the same condition just after the "Create" function

Rosh :)
DAEAuthor Commented:
Thank Rosh. It work excellent.

Stay in touch. My ICQ number is: 40317575
Roshan DavisCommented:
Thankx and Good Luck
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.