I've been playing around with Virtual Earth a lot lately for a new, personal web application that I'm writing. Writing this application has been a great learning experience as I'm using .NET 3.5 in VS2008 Beta 2, Virtual Earth, Silverlight, and plenty of ASP.NET Ajax goodness. The application is a real client-centric beauty - actually there's only a Default.aspx page with a map on it at this stage, the rest is all driven in the client with async web service calls... the lot! 
Working with the map has been an especially good experience, and it takes a bit to get into the new paradigm of navigating between locations on a map as opposed to navigating to different pages in a typical web site.
Anyways, today I added some effects that I thought worthy of blogging, so here goes... First, I added a context menu that appears when you right click on the map to display extra functions that the user can use. Displaying a context menu is a simple matter of attaching to the onclilck event of the map:
this._map.AttachEvent("onclick", this.MapClickHandler);
In your handler function 'MapClickHandler' you can then check for the right button and display some UI for a context menu:
if( e.rightMouseButton ) {
this._ContextMenu.Show(e.clientX, e.clientY, e.zoomLevel) ;
}
There's a good article here which shows how to do this, but you'll want to use the JavaScript that I've shown above instead of theirs, as mine works against the V5 version of the VirtualEarth API. The article is good for showing a nice, simple context menu UI though, so go have a read of it. The context menu ends up looking like this:
The next thing that I wanted to do was to add a little dot when you right click to display the context menu to better visualize the selection. This is the same behavior as the little red dot that you see when you right click on the map at http://local.live.com/ - notice the little red dot at the top left corner of the context menu in the following image:

To achieve this effect, I inserted some code when handling the right mouse click to display a DIV with the appearance that I wanted:
if( e.rightMouseButton ) {
this._DisplayDot(e.clientX, e.clientY) ;
this._ContextMenu.Show(e.clientX, e.clientY, e.zoomLevel) ;
}else{
this._HideDot() ;
this._ContextMenu.Hide() ;
}
The _DisplayDot function looks like so:
_DisplayDot: function(clientX, clientY) {
var dotselected = $get("dotselected") ;
dotselected.style.display='block';
dotselected.style.left = clientX - 5;
dotselected.style.top = clientY - 5;
}
As you can see, it simply uses the $get function to get a hold of the DIV instance and then sets it to visible. And Hiding it is just as simple...
_HideDot: function() {
var dotselected = $get("dotselected") ;
dotselected.style.display='none';
}
The next thing that I wanted to do was to ensure that the map zooms to where you right click when you choose Zoom from the context menu. A lot of mapping apps don't do this, but it's definitely what I would class as expected behavior. This is done by storing the co-ordinates when the ContextMenu is created like so:
if( e.rightMouseButton ) {
this._DisplayDot(e.clientX, e.clientY) ;
this._ContextMenu.Show(e.clientX, e.clientY, e.zoomLevel) ;
var pixel = new VEPixel(e.mapX - 5, e.mapY - 5);
this._selectedLL = this._map.PixelToLatLong(pixel);
}else{
this._HideDot(e.clientX, e.clientY) ;
this._ContextMenu.Hide() ;
this._selectedLL = null ;
}
Doing this stores the LatLong so that it is available for any of the callback handlers for your context menu functions. An example of how this might be used can be seen in this context menu function that I have for zooming to street level:
ZoomToCityLevel: function() {
this._map.SetCenterAndZoom(this._selectedLL, 12);
this._contextMenu.Hide() ;
this._HideDot() ;
this._selectedLL = null ;
}
When the user clicks on a custom context menu function I call this function which sets the map's zoom level to '12' and centers the map based on the stored co-ordinates that we collected when they right-clicked on the map. This gives the desired effect of zooming to city level and scrolling the map to where the user selected - as opposed to simply zooming, which would zoom to the currently centered location, which might not have been anywhere near where the user clicked.
Anyways, a long post, but I hope that it helps someone, somewhere 