If you write a Visio add-in that targets multiple Visio versions at the same time, and have some custom buttons with images (with transparency), you might run into trouble with that new Visio 2010 Ribbon user interface needs different “flavor” of images compared to Visio 2003 and 2007. So you’ll have to to either create two separate sets of images (one set for pre-ribbon version of Visio, the second set for the ribbon one), or to “dance around a little” and make both versions consume the same set of images. The article focuses on the second approach I ended up with.
This article explains this post in microsoft.public.visio.developers newsgroup, and provides information on how one can to save Visio shapes in external source exactly, so here is the code to store master/shape in a stream and then drop it back to the document:
To save Visio shapes in some external system (persist them) you can:
- Query master or shape you want to persist for IDataObject interface.
- Using this interface, obtain data blob in "Visio 11 Shapes" clipboard format (or maybe actually anything that contains “Shapes” word to be compatible with further Visio versions, please refer to the code).
Now this blob can be stored any way you want (database/memory/file/whatever). The sample code just saves it to a string variable in base64 encoding. To drop shapes back to the drawing, you can use "Drop" functions of Visio document/page. It turned out that these functions are happy enough with plain IDataObject interface passed in. So, to drop the stored master or shape back to the drawing:
- Create you own object that implements IDataObject interface.
- Load this object with your data
- Pass this object in one of those "Drop" functions (e.g. Page.Drop)
This post explains how to make a ribbon tab in Visio 2010 ribbon document-specific. Means, activate a custom ribbon tab only for a specific document.
This article discusses the implementation of a document-specific tab in a COM add-in; also, it focuses on details you might be interested in if you e.g. program unmanaged C++. Note that you could create a custom document-specific ribbon by other means, e.g. by embedding your custom interface in a document template using new Visio 2010 property Document.CustomUI
Nevertheless, one of the ways to it is
This post explains how one can customize Visio 2010 Ribbon from Visio add-in (and is based on Visio CTP). Namely, it shows how to add a custom tab to the Visio ribbon. The source code and sample project is at the end of the article.