A couple of weeks ago Guoqiang Wu posted an article on compacting virtual hard disks (http://blogs.msdn.com/guowu/archive/2005/05/17/418457.aspx). The main issue he addresses is that in order to efficiently compact a virtual hard disk – you need to defragment both the files and free space on the virtual hard disk before running the Virtual Disk Pre-compactor. The problem here is that the built in Windows defragmentation tool does not defragment free space.
Guoqiang recommends this free defragmentation tool: http://www.whitneyfamily.org/Hacks/?item=Defrag which I have used in the past with much success. However these days I prefer to use DisKeeper (http://www.diskeeper.com/defrag.asp) as I find that this is a much more user friendly solution and find that I always get smaller virtual hard disks as a result.