I've added new OLE verb to Scribble App, named it 'Add Random Triangle'. The
problem is that I don't know how to make Excel refresh scribble object in all
cases. The verb works fine with Word and PowerPoint, but it doesn't work in
Excel in the following scenario:
1. Add a Scribble object to new Excel spreadsheet, draw a line inside.
2. save & close xls file.
3. Open saved file.
4. right-click on it and run 'Add Random Triangle' verb
5. NOTHING HAPPENS
6. if you open the Scribble object you will find there is a triangle added
7. close Scribble object edition, and add another random triangle - now it
shows up.
So my question is how should I correctly update the object when it changes
as a result on nonstandard verb?
Changes I made to scribble:
1. add new verb - scribble.cpp, InitInstance method, line 143:
VERIFY( CRegKey::SetValue( HKEY_CLASSES_ROOT,
"CLSID\\{7559FD90-9B93-11CE-B0F0-00AA006C28B3}\\verb\\2", "Add Random
&Triangle,0,2" ) == ERROR_SUCCESS );
2. add new verb implementation - overriden CScribbleItem::OnDoVerb:
#define SIZE 200
void CScribbleItem::OnDoVerb(LONG iVerb)
{
// "Add Random Triangle" verb implementation
if( iVerb == 2 )
{
CScribbleDoc *pDoc = GetDocument();
srand( (unsigned int)time(NULL) );
CStroke *pStroke = pDoc->NewStroke();
CPoint p1( (int)( rand()*(double)SIZE/RAND_MAX),
-(int)(rand()*(double)SIZE/RAND_MAX) );
pStroke->m_pointArray.Add( p1 );
pStroke->m_pointArray.Add( CPoint( (int)(rand()*(double)SIZE/RAND_MAX),
-(int)(rand()*(double)SIZE/RAND_MAX) ) );
pStroke->m_pointArray.Add( CPoint( (int)(rand()*(double)SIZE/RAND_MAX),
-(int)(rand()*(double)SIZE/RAND_MAX) ) );
pStroke->m_pointArray.Add( p1 );
pStroke->FinishStroke();
// question: How should I save changes so that Excel (and all other OLE
clients) both save & redraw the object (and close it)?
pDoc->SetModifiedFlag();
pDoc->NotifyChanged();
pDoc->SaveEmbedding();
pDoc->NotifyClosed();
}
else
COleServerItem::OnDoVerb(iVerb);
}
3. stdafx.h :
#include <atlbase.h> // CRegKey class
Best regards,
Charles Wang
Microsoft Online Community Support
=====================================================
Get notification to my posts through email? Please refer to:
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications
If you are using Outlook Express, please make sure you clear the check box
"Tools/Options/Read: Get 300 headers at a time" to see your reply promptly.
Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
======================================================
When responding to posts, please "Reply to Group" via
your newsreader so that others may learn and benefit
from this issue.
======================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
======================================================
Also, you may want this reference:
How To Debug OLE Applications
http://support.microsoft.com/kb/q154116/
If you have any other questions or concerns, please feel free to let me
know.