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.

Thanks.-

PD: Sorry for my english. :)
DAEAsked:
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
eg:
Put that create function code in your ActiveX control's OnCreate something like
make DumClass object as the class member of CUserManagerCtrl
i.e
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
0
 
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 :)
0
 
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?

Thanks
0
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
http://www.codeproject.com/buttonctrl/mfc2ocx.asp - Creating an ActiveX button from a MFC owner-draw

button

Try these links also, this will give some ActiveX tutorials
http://www.codeguru.com/activex/activexTutorial.html  by Kapil Chaturvedi.
http://www.codeguru.com/activex/activex_tut.shtml by Navin Kohli.

Good Luck
0
 
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.
0
 
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)
{
      CDialog::DoDataExchange(pDX);
      //{{AFX_DATA_MAP(CTestDlg)
      DDX_Control(pDX, IDC_CUSTOMCONTROL, m_oDumClass);
      //}}AFX_DATA_MAP
}

And it work excellent.

I'm burning my brain here.

roshmon we are in the right path.

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

Rosh :)


0
 
Roshan DavisCommented:
In your class "DumClass", is there any "Create" function ?
If yes, use that function instead of the above
Rosh:)
0
 
DAEAuthor Commented:
The function "Create" returns 1.
0
 
DAEAuthor Commented:
There is no overload create function in the class.
0
 
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 :)
0
 
DAEAuthor Commented:
Thank Rosh. It work excellent.

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