windows-nt/Source/XPSP1/NT/inetsrv/msmq/sdk/samples/imp_draw
2020-09-26 16:20:57 +08:00
..
res Add source files 2020-09-26 16:20:57 +08:00
drawarea.cpp Add source files 2020-09-26 16:20:57 +08:00
drawarea.h Add source files 2020-09-26 16:20:57 +08:00
evhandle.cpp Add source files 2020-09-26 16:20:57 +08:00
evhandle.h Add source files 2020-09-26 16:20:57 +08:00
imp_dlg.cpp Add source files 2020-09-26 16:20:57 +08:00
imp_dlg.h Add source files 2020-09-26 16:20:57 +08:00
imp_draw.cpp Add source files 2020-09-26 16:20:57 +08:00
imp_draw.dsp Add source files 2020-09-26 16:20:57 +08:00
imp_draw.h Add source files 2020-09-26 16:20:57 +08:00
imp_draw.mak Add source files 2020-09-26 16:20:57 +08:00
imp_draw.rc Add source files 2020-09-26 16:20:57 +08:00
imp_draw.vcproj Add source files 2020-09-26 16:20:57 +08:00
logindlg.cpp Add source files 2020-09-26 16:20:57 +08:00
logindlg.h Add source files 2020-09-26 16:20:57 +08:00
makefile Add source files 2020-09-26 16:20:57 +08:00
readme.txt Add source files 2020-09-26 16:20:57 +08:00
resource.h Add source files 2020-09-26 16:20:57 +08:00
stdafx.cpp Add source files 2020-09-26 16:20:57 +08:00
stdafx.h Add source files 2020-09-26 16:20:57 +08:00

This sample demonstrates how to use the MSMQ ActiveX components with the #import 
compiler directive new to Visual C++ 5.0. This program also demonstrates how to         
perform asynchronous receive using MSMQ ActiveX Events in C++.

This sample program functions identically to the VB_Draw and C_Draw samples included 
with the MSMQ product and will inter-operate with those two samples.

In order to handle ActiveX Event notification a new class, CMSMQEventHandler, has been
defined.  This class can be used in other projects by deriving a new class from 
CMSMQEventHandler and overriding the Arrived and ArrivedError methods.

Aside from this new class the majority of code in this project was taken or adapted 
from the existing C_Draw and VB_Draw samples.

==========================================================================
				INTRODUCTION
==========================================================================

The #import compiler directive makes COM objects easier to use with C++.  
This sample program functions identically to the VB_Draw and C_Draw samples 
included with the MSMQ product, and will interoperate with those two samples.  

In order to handle ActiveX Event notification, a new class, CMSMQEventHandler, 
has been defined.  This class can be used in other projects by deriving a new 
class from CMSMQEventHandler and overriding the Arrived and ArrivedError methods.

This sample can run both on DS enabled and DS disabled computers.
When connecting two DS enabled computers, standard connection mode can be used, meaning that
public queues are created and that a query on the DS is made. But if at least one of the computers is 
DS disabled, a direct connection must be established. This means that only private queues are created. 
In that case, no query on the DS can be done, so the user has to specify the name of the computer to connect 
with, as well as the queue name.

Aside from this new class the majority of code in this project was taken or          
adapted from the existing MSMQ SDK C_Draw and VB_Draw samples.


Requirements:

MSMQ 1.0 or later must be installed 


==========================================================================
				HOW TO USE
==========================================================================

NOTE: You can run multiple instances of this sample on one or more machines. 
The MSMQ Client must be installed on all machines used in the procedure below:

To see MSMQ functionality using Imp_Draw:

1. Run Imp_Draw.

2. Type your name in the login dialog.

   The name you specify is used to create a queue on your computer.

3. Run Imp_Draw on a second computer, specifying a different   
   name.
   Both computers must be in the same site.

4. Only on a DS enabled Computer:        
   Choose connection configuration (i.e. connecting with a DS enabled or a DS disabled computer).

   On a DS disabled Computer you cannot choose connection configuration. Only direct connection can be established.

   Follow the instruction according to the configuration you chose.

5. Standard mode:
   Type the name of the queue you wish to send messages to.

   Direct mode:
   Type the name of the queue and the name of the computer you wish to send messages to.  

6. Click the attach button.

Please note that you can<61>t connect between instances from different configuration.         
Both instances of Imp_Draw now have their own queue for receiving messages, and have opened the other 
instance's queue for send. You can either type text or draw on the form (by holding down the left mouse button).
As you type text or draw, each character or mouse movement is sent between the two instances of Imp_Draw.

You can close either instance of Imp_Draw and continue
sending messages. When Imp_Draw is restarted and you use the
same name, Imp_Draw receives all undelivered messages. If you
change the delivery mode from Express to Recoverable, you can close
one instance of Imp_Draw, restart the computer, restart
Imp_Draw, and receive messages that were sent while the
computer was rebooting.

Tip
To clear the Imp_Draw display drawing area, right-click
within the drawing area.

==========================================================================
				HOW IT WORKS
==========================================================================

	The main dialog is handled by the CImp_DrawDlg class, in the 
Imp_DrawDlg.cpp file.  It initializes the dialog, handles queue events, opens
the friend queue and sends mouse events and keystrokes to that friend queue.  

	When the dialog box is initialized, it prompts for a username, connects
to the local queue with that name, and registers to receive events from that
queue.  It will create the user's queue if necessary.  Events are handled 
via the CMSMQEventEvents class, which knows how to register for events if it's
given an event object.  That event object is then linked to the appropriate 
queue using the queue's EnableNotification method.

	Drawing within the draw area of the main dialog is handled by CDrawArea 
in the DRAWAREA.CPP file, which forwards keystroke and mouse events to the
main dialog so they can be sent to the friend queue if need be.

	When the main dialog's Attach button is pressed, the program will read
the name of the friend queue from the edit box and try to connect to that
queue to send mouse events and keystrokes.