The Old New Thing

What triggers the recall of an offline file?

Hierarchical storage management is one of the taxes software developers have to pay. What can you safely do to an offline file? What will trigger its recall? (First, a note on terminology: Recalling a file means to restore it from remote storage to local storage. A file that has been recalled is online; a file that has been placed on remote ...

What('s) a character!

Norman Diamond seems to have made a side career of harping on this topic on a fairly regular basis, although he never comes out and says that this is what he's complaining about. He just assumes everybody knows. (This usually leads to confusion, as you can see from the follow-ups.) Back in the ANSI days, terminology was simpler. Windows ...

Why can't I GetProcAddress for CreateWindow?

Occasionally, I'll see people having trouble trying to for functions like or . Usually, it's coming from people who are trying to write p/invoke signatures, for p/invoke does a under the covers. Why can't you for these functions? Because they're not really functions. They're function-like macros: In fact, as you can see above is ...

The first parameter to VerQueryValue really must be a buffer you obtained from GetFileVersionInfo

The documentation for the function states that the first parameter is a "pointer to the buffer containing the version-information resource returned by the function." Some people, however, decide to bypass this step and pass a pointer to data that was obtained some other way, and then wonder why doesn't work. The documentation says that ...

Do not write in-process shell extensions in managed code

Jesse Kaplan, one of the CLR program managers, explains why you shouldn't write in-process shell extensions in managed code. The short version is that doing so introduces a CLR version dependency which may conflict with the CLR version expected by the host process. Remember that shell extensions are injected into all processes that use the ...

Why do user interface actions tend to occur on the release, not on the press?

If you pay close attention, you'll notice that most user interface actions tend to occur on the release, not on the press. When you click on a button, the action occurs when the mouse button is released. When you press the Windows key, the Start menu pops up when you release it. When you tap the Alt key, the menu becomes active when you ...

Computing listview infotips in the background

When the listview control asks you for an infotip, it sends you then notification, and when you return, the result is displayed as the infotip. But what if computing the infotip takes a long time? You don't want to stall the UI thread on a long operation, after all. This is where comes in. If you want to say, "Um, I'm not ready with that ...

Displaying infotips for folded and unfolded listview items

When displaying infotips for listview items, you have to deal with both the folded and unfolded case. "Folded" is the term used to describe a listview item in large icon mode whose text has been truncated due to length. When the user selects the item, the full text is revealed, a process known as "unfolding". Take our scratch program and ...