15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Calling Default Implementation of Rich Edit OLE Handlers

Michael Iles -- michaeli@dra.com
Tuesday, October 08, 1996


Environment: VC++ 4.2a, NT 4.0

This is a followup question to a question posed a while ago. I wanted   
(and still want :) to receive notification of a drag-and-drop operation   
in a CRichEditCtrl-derived class. I have learned that this functionality   
is handled by the OLE 'part' of the object, and to handle it I have added   
an OLE interface map to my derived class and provided an implementation   
for all the functions in IRichEditOleCallback. I substitute my functions   
for the default ones with CRichEditCtrl::SetOleCallback, and this works   
fine: my handlers are called at the appropriate times.

** My problem is this: I want to be able to call the default   
implementations of these functions, because I'm only looking for   
_notification_ of drag-and-drop operations and not customizing the   
implementation.

The obvious solution (to me) seemed to be to get a pointer to the old   
IRichEditOleCallback before I substituted my new one, which I would then   
be able to call from my handlers. There is no GetOleCallback method but   
there is GetIRichEditOle which returns a pointer to a different   
interface, IRichEditOle. I tried getting this interface and calling   
QueryInterface through it with IID_IRichEditOleCallback, hoping to   
receive the original IRichEditOleCallback interface - however, it returns   
NULL.

The documentation on this sort of thing seems to be _extremely_ sparse.   
I've looked through DejaNews, the online MS KB, 'MFC Internals', .B   
ekiM's 'Revolutionary Guide to MFC 4', etc. etc.

Any help would be greatly appreciated!
Mike.

 ----------------------------------------
Michael Iles, michaeli@dra.com
Ceci n'est pas une .sig





Ed Ball -- ed@logos.com
Wednesday, October 09, 1996

[Mini-digest: 2 responses]


As far as I know, there is no "default" implementation of
IRichEditOleCallback -- if you want the rich edit control to do what it
would have done had you not provided a callback, return E_NOTIMPL from
each method in the callback. This is what MFC does when it provides the
callback in CRichEditView -- see
XRichEditOleCallback::ContextSensitiveHelp,
XRichEditOleCallback::GetClipboardData, and
XRichEditOleCallback::GetContextMenu in VIEWRICH.CPP for examples. If
all of your callback methods already return E_NOTIMPL, then I'm not sure
what the problem is...

- Ed

>----------
>From: 	Michael Iles[SMTP:michaeli@dra.com]
>Sent: 	Tuesday, October 08, 1996 8:49 AM
>To: 	'MFC List'
>Subject: 	Calling Default Implementation of Rich Edit OLE Handlers
>
>
>Environment: VC++ 4.2a, NT 4.0
>
>This is a followup question to a question posed a while ago. I wanted
>(and still want :) to receive notification of a drag-and-drop operation
>in a CRichEditCtrl-derived class. I have learned that this
>functionality is handled by the OLE 'part' of the object, and to handle
>it I have added an OLE interface map to my derived class and provided
>an implementation for all the functions in IRichEditOleCallback. I
>substitute my functions for the default ones with
>CRichEditCtrl::SetOleCallback, and this works fine: my handlers are
>called at the appropriate times.
>
>** My problem is this: I want to be able to call the default
>implementations of these functions, because I'm only looking for
>_notification_ of drag-and-drop operations and not customizing the
>implementation.
>
>The obvious solution (to me) seemed to be to get a pointer to the old
>IRichEditOleCallback before I substituted my new one, which I would
>then be able to call from my handlers. There is no GetOleCallback
>method but there is GetIRichEditOle which returns a pointer to a
>different interface, IRichEditOle. I tried getting this interface and
>calling QueryInterface through it with IID_IRichEditOleCallback, hoping
>to receive the original IRichEditOleCallback interface - however, it
>returns NULL.
>
>The documentation on this sort of thing seems to be _extremely_ sparse.
>I've looked through DejaNews, the online MS KB, 'MFC Internals', .B
>ekiM's 'Revolutionary Guide to MFC 4', etc. etc.
>
>Any help would be greatly appreciated!
>Mike.
>
> ----------------------------------------
>Michael Iles, michaeli@dra.com
>Ceci n'est pas une .sig
>
>
>
-----From: Gautam Kasturi 


Hey Michael!,
The reason you are getting NULL when querying for IRichEditCallback is 
because there is no IRichEditCallback interface with implementation 
defined for the richedit control. By using SetOleCallback u are giving 
the control this interface. 
I know this sounds wierd to the point of being outrageous, but it is so 
unless I am thoroughly mistaken.
To get around your problem I guess you can provide dummy handlers for all 
other members of the interface besides the one u are interested in 
(dragndrop).

hope i am of help,
gk



Noel Burton-Krahn -- noel@harleystreet.com
Thursday, October 10, 1996

Try this:

http://www.microsoft.com/kb/developr/visual_c/Q141277.htm

or Technical notes 38 and 39

----------
From: 	Michael Iles[SMTP:michaeli@dra.com]
Sent: 	Tuesday, October 08, 1996 8:49 AM
To: 	'MFC List'
Subject: 	Calling Default Implementation of Rich Edit OLE Handlers


Environment: VC++ 4.2a, NT 4.0

This is a followup question to a question posed a while ago. I wanted   
(and still want :) to receive notification of a drag-and-drop operation   
in a CRichEditCtrl-derived class. I have learned that this functionality   
is handled by the OLE 'part' of the object, and to handle it I have added   
an OLE interface map to my derived class and provided an implementation   
for all the functions in IRichEditOleCallback. I substitute my functions   
for the default ones with CRichEditCtrl::SetOleCallback, and this works   
fine: my handlers are called at the appropriate times.

** My problem is this: I want to be able to call the default   
implementations of these functions, because I'm only looking for   
_notification_ of drag-and-drop operations and not customizing the   
implementation.

The obvious solution (to me) seemed to be to get a pointer to the old   
IRichEditOleCallback before I substituted my new one, which I would then   
be able to call from my handlers. There is no GetOleCallback method but   
there is GetIRichEditOle which returns a pointer to a different   
interface, IRichEditOle. I tried getting this interface and calling   
QueryInterface through it with IID_IRichEditOleCallback, hoping to   
receive the original IRichEditOleCallback interface - however, it returns   
NULL.

The documentation on this sort of thing seems to be _extremely_ sparse.   
I've looked through DejaNews, the online MS KB, 'MFC Internals', .B   
ekiM's 'Revolutionary Guide to MFC 4', etc. etc.

Any help would be greatly appreciated!
Mike.

 ----------------------------------------
Michael Iles, michaeli@dra.com
Ceci n'est pas une .sig









| Вернуться в корень Архива |