App Building Diary Day 3: Bug Fixing is Hard

11:15 Non-Late Arrival: I seem to get a later start each day. Today I had a 9am meeting that I arrived @ 8:59 for and then my weekly 1:1 with Mark that lasted until 11. I discovered my autocomplete window doesn’t know when VS itself loses focus so I’m going to attempt to fix this one last bug before moving on to new features. I also decided not to spin off a release. 1. You guys don’t have Whidbey beta 1 yet. 2. Backporting introduced more bugs so I couldn’t quickly have an Everett release to show.

11:48 VS Multi-Mon Bug: The tip information displayed for the VS intelisense will draw itself across multiple screens if it has the choice. This is annoying because it is hard to read the tip when you have monitor separation.

2:00 “Last Bug” Fixed: I toyed with a number of different solutions to my problem that dte does not expose window messages about the main app being activated or de-activated. I had the mainwindow sub-classed at one point and this was working fine, but it still seemed a bit heavy duty. My eventual fix was to override the WndProc method for my autocomplete window form. This gave me access to all the window messages that made their way down to it. Thankfully VS propagated the WM_ACTIVATEAPP message down to my user control. This message is sent whenever a window is about to be activated or deactivated. Now my “topmost” window will disappear if the user switches apps. The code looks like this. Rage Against the Machine was the musical inspiration for this one.

protected override void WndProc(ref System.Windows.Forms.Message m)


      // defined in winuser.h

      const int WM_ACTIVATEAPP = 0x001C;

// Is the message the only one I care about

      if (m.Msg == WM_ACTIVATEAPP)


            this.Visible = false;


      // pass all messages through to the base

      base.WndProc(ref m);


3:40 Steady Progress: Currently I’m working on making tab completion work for both the cmd.exe context (which it already was) and the special VS command context you get to by entering a VS command like !file.openfile. This way the file.openfile command will understand your current directory context and open the correct file.

3:57 Sweeeeeet: It’s pretty cool to see the tab autocomplete understand the context it’s being used it. I think I have a compelling usage scenario here. Now for the final touch of making sure it uses the right directory.

5:00 Sweet Release: I have all this stuff working stable and the way I like it. Time to port the changes back to Everett and spin off a release. I didn’t get all the way to my intended version 1.0 so I’ll have to make some more time in the future to fix some extra bugs and add some touches that will make the integration even smoother. See my release post coming soon for more information and details on this version.