The Old New Thing

Ein hundert Dinge, die in den Vereinigten Staaten besser bleiben

I think it is a trait common to many people that they are fascinated by how their country is viewed by others. The leftist Die Tageszeitung from Germany reacted to the result of the most recent U.S. presidential election with their list of one hundred things that are still better in the United States. Those who cannot read German can use ...

A history of GlobalLock, part 2: Selectors

With the advent of the 80286, Windows could take advantage of that processor's "protected mode". processor. There was still no virtual memory, but you did have memory protection. Global handles turned into "descriptors", more commonly known as "selectors". Architectural note: The 80286 did have support for both a "local descriptor table" ...

A history of GlobalLock, part 1: The early years

Once upon a time, there was Windows 1.0. This was truly The Before Time. 640K. Segments. Near and far pointers. No virtual memory. Co-operative multitasking. Since there was no virtual memory, swapping had to be done with the co-operation of the application. When there was an attempt to allocate memory (either for code or data) and ...

Why do I sometimes see redundant casts before casting to LPARAM?

If you read through old code, you will often find casts that seem redundant. SendMessage(hwndListBox, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"string"); Why was "string" cast to LPSTR? It's already an LPSTR! These are leftovers from 16-bit Windows. Recall that in 16-bit Windows, pointers were near by default. Consequently, "string" was a near ...

What was the point of the GMEM_SHARE flag?

The GlobalAlloc function has a GMEM_SHARE flag. What was it for? In 16-bit Windows, the GMEM_SHARE flag controlled whether the memory should outlive the process that allocated it. By default, all memory allocated by a process was automatically freed when that process exited. Passing the GMEM_SHARE flag suppressed this automatic cleanup. ...

And to think they let me get away with it for five years

According to the Constitution of the State of New Jersey, Article II, paragraph 6: No idiot or insane person shall enjoy the right of suffrage. Why are constitutional articles labelled with Roman numerals? Makes it sound like the Super Bowl or something. The state appellate court did rule a few years ago that being ...

What was the difference between LocalAlloc and GlobalAlloc?

Back in the days of 16-bit Windows, the difference was significant. In 16-bit Windows, memory was accessed through values called "selectors", each of which could address up to 64K. There was a default selector called the "data selector"; operations on so-called "near pointers" were performed relative to the data selector. For example, if you...

Why didn’t the desktop window shrink to exclude the taskbar?

The taskbar created all sorts of interesting problems, since the work area was not equal to the entire screen dimensions. (Multiple monitors created similar problems.) "Why didn't the gui return the usable workspace as the root window (excluding the taskbar)?" That would have made things even worse. Lots of programs want to cover the ...

Where did windows minimize to before the taskbar was invented?

Before Explorer was introduced in Windows 95, the Windows desktop was a very different place. The icons on your desktop did not represent files; rather, when you minimized a program, it turned into an icon on the desktop. To open a minimized program, you had to hunt for its icon, possibly minimizing other programs to get them out of ...

Sometimes you can’t read the text under the cursor

I had previously written on how you can retrieve the text under the cursor, and you may have noticed that it produces mixed results. It works great with some programs but not with others. It depends on the program in question. Some programs were written with greater attention to supporting screen readers than others. Internet Explorer, for ...