Connection Points Example for VC++6 and VB Needed

VB is Easy: Just DoEvents or WithEvents.
But how do I get connection points up and running with Visual Studio 6?

I want to do mostly pressing wizards and popup menus. Almost no coding...

As an example: I have an IKid object that sends a "WantHotterWaterEvent" to three sinks.

Thanks, Moshe
LVL 2
mflamAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

nietodCommented:
>> I want to do mostly pressing wizards and
>> popup menus. Almost no coding..
That is what VB is for.  In VC you will have to do a decent amount of programming.  The MFC wizzards will get you started, but after that...
0
chensuCommented:
SAMPLE: Connpts.exe Implements Connection Points in MFC Apps
http://support.microsoft.com/support/kb/articles/Q152/0/87.asp
0
mflamAuthor Commented:
I will restate the question, and then explain why I rejected this answer.

QUESTION: I Need a "tutorial" of adding an event (connection point) to a server side ATL Simple Object.
I want to do it with the least amount of coding, using the most of the "Implement Connection Points" and "Insert New Class / ATL Class" wizards.
If adding a line of ATL is sufficient, I wish to do so.


1. I am fluent with MSDN.  
This is no help.
2. I wish to do this in ATL not MFC.

3. I even have an answer of my own, except that it is not the best one:
I open a sepparate project, and
in the Full-Control (Same with MFC ActiveX control wizard) I can add "events".  
Then on the simple ATL object I "implement connection point" with the .tlb from the Full Control.

Thanks  Moshe
0
Cloud Class® Course: C++ 11 Fundamentals

This course will introduce you to C++ 11 and teach you about syntax fundamentals.

naveenkohliCommented:
Have you tried the tutorial in MSDN that explains how to add events to your control..


POLYGON: The ATL Tutorial

http://msdn.microsoft.com/library/devprods/vs6/visualc/vcsample/_sample_atl_polygon.htm
0
chensuCommented:
I think your method is good enough. The other way is to add the event interface to the IDL file so that you can build a type library from it.
0
mflamAuthor Commented:
Thank you, chensu and naveenkohli for your comments. As I said, I know the MSDN and controls. I'm looking for adding a connection point in a SIMPLE ATL command. (There's an old fasioned article in the MSDN about that.)

If anybody knows of a good answer, (I find it hard to believe there is no new way to do it all from the VC6 IDE interface) I will be very happy.

ADVAthanksNCE,  Moshe
0
mflamAuthor Commented:
I found my answer! On the online MSDN!
Sorry people.
I'll post a short tutorial from what I learn there. (Q194179 ATLEVNT.EXE)

Moshe
0
chensuCommented:
But that article is to capture events. I thought you wanted to fire event from your object.
0
mflamAuthor Commented:
I would like to answer my own question (took 3 days to find answer). How do I do this?
This is important question and good answer IS NOT TO BE FOUND(!) on MSDN or internet.
I am putting it on my own site, but thought you people would like to see it too.
Here goes (next comment: Actually answer)
0
mflamAuthor Commented:
The Answer: Making simple ATL Obj Events
========================================
[RMB is "Right Mouse Button"]
[CP  is "Connection Point"]
Most of this tutorial is in the
"Class View" tab of Project Explorer.

[Make Proj and object]
Make an ATL project. ("ASimpServ")
Add a SIMPLE OBJECT to the ATL.("ASimp")
Before OKing it:
   Check: Supports IConnectionPoints.
   Check: Supports ISupportErrorInfo.

[Make property and method]
Click on + of CASimp
RMB on internal IASimp
 Add property: (long AProp, no params)
 Add method: (SayHi, no params)

[Add event fit for VB]
RMB on _IASimpEvents
 Add method: (void AEvent, no params)
 Add method: (void AAnotherEv, no prms)
 NOTE: Must be void for VB.

[Get event to fire when needed]
[...Build, ImplementCP, FireEvent]

RMB on CASimp
 Implement Connection Point
 Choose the _ISimpEvents
 OK and Build.

(Let's see what happened)
Additions to our code are:
1. A new proxy class with 2 methods:
 Fire_AEvent();
 Fire_AAnotherEvent();
2. IDL file has:
 interface of events
 dispinterface of events
 coclass [default, source] events
3.CProxyASimpEvents in Class View.
4.CProxyASimpEvents template in .h file
5.In CASimp header (ASimp.h):
   #includes proxy.
   :inherits from proxy.
   CP MAP entries added.

[... now fire the event]
(We will fix up our property)
RMB the CASimp
Add variable (long m_AProp)

Click '+' sign of CASimp (open CASimp)
DClick put_AProp
Add code:
 m_AProp = newVal;
 if (newVal > 90)
 {
    MessageBox(NULL, Too hot",
               "ASimp says", MB_OK);
    Fire_AEvent(); // It's so easy!
 }
(NOTE: Use Ctrl-Space to complete words
 like Fire_... and Messa...)

DClick get_AProp
Add code:
 *val = m_AProp;

DClick SayHi
Add code:
 MessageBox(NULL, "Hi",
            "From ASimp", MB_OK);

Build!
Your ready to run in VB!
                 
0
mflamAuthor Commented:
Continuation of Answer: VB ATL Client
========================================
Now the VB client just uses the
WithEvents!
1. Reference you object
 (Project/References
  browse to the dll and OK it all)
2. Add to your code:
---------------------
Public WithEvents obj as  ASimp
Sub Command1_Click
Set obj = CreateObject(ASimpPrj.ASimp)

obj.AProp = 22
msgbox obj.AProp

obj.AProp = 100
msgbox obj.AProp
----------------------
3. Now click the obj and find the AEvent event for this object.
You should get an automatic SUB
----------------
Sub On_AEvent()
End Sub
----------------
4. Add to your sub a msgbox
 MsgBox "vb client received ASimp event"

5. Try it!

Have fun,  Moshe Flam
0
naveenkohliCommented:
mflam,
whats the difference between your method and the one described in Polygon tutorial. I believe there is none.

anyway, its great that you have finally found the soultion you were looking for.

Peace :-)
0
chensuCommented:
Isn't it the same as the method described in the ATL documentation?

Step 5: Adding an Event
http://msdn.microsoft.com/isapi/msdnlib.idc?theURL=/library/devprods/vs6/visualc/vcmfc/_atl_step_5.3a_.adding_an_event.htm
0
ianBCommented:
Hi,

I am answering this question so it can be saved as a PAQ. I have refunded the points mflam used in this question.

IAn
Community Support @ Experts Exchange
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
mflamAuthor Commented:
Thank you very much.

Yes, naveen kohli, the Polygon is the same, except for one small point,
which caused me to think it wasn't :-(
It's an example of a "Full control".
Since the MFC ActiveX Control wizard has an "add event", I had presumed that "full control" support would be different from the support for an ATL Simple Object.
I kept looking, till I found the example (probably from VC5) and figured it out myself.

One good thing about my tutorial (I think) is that it points out a few caveats that you must abide by, and omits the need to do the rest of the tut, just directly what you want to do.
On the other hand, I didn't add the nice pictures.

Oh well,
here comes my next q, and this time I'll listen. (BTW naveen in Hebrew is "We will understand").

Thanks again, Moshe
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C++

From novice to tech pro — start learning today.