This is the second Tuesday that I have given out info on some changes in the object model for the next version. I think I am going to try and do a “New feature Tuesdays” blog from now on.

This week’s topic: Passing bitmaps to VS.

In version 7.0/7.1, when we had an automation methods or properties where you could pass a bitmap, and to pass that bitmap you would need to wrap it inside of a IPictureDisp COM interface then call the method. This was a real pain for a couple of reasons. First, you neded to deal with creating and setting the properties of an extra object, an IPictureDisp interface. Second, you could not remote an IPictureDisp; this interface does not cross process boundaries so you could not CoCreate an instance of VS and set one of these images. Next, IPictureDisp is a COM concept, not an .NET one. If you wanted to use an IPictureDisp, you would either need to call off to a VB specific assembly to instantiate one of these interfaces, and it never worked right, VB would munge the bitmap a bit, causing the image to not look right especially if it used color 0x00fe00 (the transparency color); or you would need to create a P/Invoke call (which is messy).

There are some changes for Whidbey that will change how bitmaps can be passed to methods that accept images. The IPictureDisp method will still work, it needs to otherwise we will be breaking existing code. But we were lucky, when we created the methods that take images we set them up to take Variants (this was not exactly by design, but it worked out in our favor), and because they take Variants, we can accept other data types. These other data types include strings and integers (VT_INT). When you call on of the image APIs, you can now pass either a string, which is the path to a bitmap, or a HBITMAP to a bitmap (found in .NET using the System.Drawing.Bitmap.GetHbitmap() method). These changes will be made to the APIs for setting a picture on a Add-in created tab-linked tool window (SetTabPicture), setting a custom animation in the status bar (Animate), and the bitmap shown next to a task list item (Add). We will not be fundamentally changing the API of how you set a bitmap for a tool bar button (AddNamedCommand), but we will be making it a bit easier (description of that will be available in a future blog).