Emergency vacation

Hurricane Isabel made a mess of my weekend travel plans, so I decided, “If you can’t beat ’em, join ’em.” My outbound flight was cancelled, and even with the best possible substitution – a flight out the very next day – losing a day on a weekend trip pretty much kills it. So I extended…


The end of the scrollbar series

Okay, that’s basically the end of the scrollbar series. Do people actually like the idea of a coding series? It gets very few comments, and it’s a lot of work to write, so if nobody actually cares I can just write about quick little things and not try to be coherent from day to day….


Answers to exercise from Scrollbars Part 11

Exercise: Why do we use the formula c = a + (b-a)/2 instead of the simpler c = (a+b)/2? Answer: To avoid integer overflow in the computation of a+b. Here, a and b are window coordinates, and the window can be anywhere. If the window were placed at extreme coordinates like (MAXLONG,MAXLONG), then the arithmetic…

Scrollbars part 12: Applying WM_NCCALCSIZE to our scrollbar sample

Now that we have learned about the intricacies of the WM_NCCALCSIZE message, we can use it to get rid of the flicker in our resizing code. We just take the trick we used above and apply it to the scroll program. First, we need to get rid of the bad flickery resize, so return the…


Why does Win32 fail a module load if an import could not be resolved?

Because we tried it the other way and it was much worse. In 16-bit Windows, a module that didn’t satisfy all its imports would still load. As long as you didn’t call a missing import, you were fine. If you did try to call a missing import, you crashed pretty spectacularly with the dreaded Unrecoverable…


Scrollbars part 11: Towards an even deeper understanding of the WM_NCCALCSIZE message

The other form of the WM_NCCALCSIZE message is the complicated one, when the WPARAM is TRUE. In this case, the LPARAM is a pointer to a NCCALCSIZE_PARAMS structure. When Windows sends the WM_NCCALCSIZE message, the NCCALCSIZE_PARAMS structure is filled out like this: rgrc[0] = new window rectangle (in parent coordinates) rgrc[1] = old window rectangle…


Eric’s complete guide to BSTR semantics

Eric Lippert has posted Eric’s Complete Guide to BSTR Semantics. This is a document that is widely valued within Microsoft, since BSTR semantics are rather tricky, and I’m glad he’s willing to share it with the world. In particular, Eric spends quite a bit of time discussion the very important equivalence of NULL and L””…


Something about Microsoft employees and milk

Behold the power of milk. Or something. Here’s another milk-related bug report from Paul Vick. Paul also has a bug report that challenges the philosophical underpinnings of the eventing model.


I’m not sure if this was a dare

Joe Beda stopped by my office, clutching a stack of documents he had just had notarized, and told me, “Raymond, you should become a notary public.” “Why?” “It’d be fun.” “Notarizing documents is fun?” “No, just being a notary public – just knowing that you had the power to notarize documents – would be fun….


Answers to exercises

Exercise: Explain why we used 0x7FFF to represent infinite height. Answer: Commenter “Reiko” got this right. 0x7FFF is the maximum integer coordinate supported by Windows 95, 98 and Me. Exercise: Explain the line rcWindow.bottom += rcTemp.top. Answer: The more precise way of writing the line would have been rcWindow.bottom += (rcTemp.top – rcWindow.top) – (0…