Showing tag results for Code

Jul 15, 2013
Post comments count0
Post likes count1

A program for my nieces: The ABCs, part 2, choosing a font

Raymond Chen
Raymond Chen

I added a feature to my ABC program that it turns out I never actually used: Change the font. I added this in case my nieces were somehow unhappy with the font I chose, and this was a little escape hatch to let me select a different one. The real work happens in the function. All I have to do is call it. I tell the common font dialog to ini...

Code
Jul 12, 2013
Post comments count0
Post likes count1

If you want to track whether the current thread owns a critical section, you can use the critical section itself to protect it

Raymond Chen
Raymond Chen

You may find yourself in the situation where you want to keep track of the owner of a critical section. This is usually for debugging or diagnostic purposes. For example, a particular function may have as a prerequisite that a particular critical section is held, and you want to assert this so that you can catch the problem when running the debug ...

Code
Jul 8, 2013
Post comments count0
Post likes count1

A program for my nieces: The ABCs, part 1

Raymond Chen
Raymond Chen

I'm going to spend the next few weeks developing a Little Program in several parts. This is a program I wrote for my nieces, who always wanted to play with my laptop (instead of playing with me). Initially, I fired up Notepad and maximized it, and cranked the font size, but that became cumbersome, because I had to reset the font size and Word Wr...

Code
Jul 1, 2013
Post comments count0
Post likes count1

Building on our program that draws content at a fixed screen position regardless of window position

Raymond Chen
Raymond Chen

Today's Little Program uses the technique we saw last week of drawing content at a fixed screen position, regardless of window position, but adds a little physics to it. Start with our scratch program and make these changes: The class simulates damped motion. Ask a physicist how it works. The rest point is the center of the window. T...

Code
Jun 28, 2013
Post comments count0
Post likes count1

It’s the address space, stupid

Raymond Chen
Raymond Chen

Nowadays, computers have so much memory that running out of RAM is rarely the cause for an "out of memory" error. Actually, let's try that again. For over a decade, hard drive have been so large (and cheap) that running out of swap space is rarely the cause for an "out of memory" error. In user-mode, the term memory refers to virtual memory,...

Code
Jun 27, 2013
Post comments count0
Post likes count1

Once you return from the WM_ENDSESSION message, your process can be terminated at any time

Raymond Chen
Raymond Chen

A customer had a program which performed some final I/O operations as it exited. Various C++ objects deleted files or flushed buffers as part of their destructors. The customer found that if their program was left running when the user shut down Windows, then the files never got deleted, and the buffers were never flushed. On the other hand, if the...

Code
Jun 26, 2013
Post comments count0
Post likes count1

The default error mode (SetErrorMode) is not zero

Raymond Chen
Raymond Chen

A customer put the following code at the start of their program: // If this assertion fires, then somebody else changed the error mode // and I just overwrote it with my error mode. ASSERT(SetErrorMode(SEM_FAILCRITICALERRORS) == 0); The customer wanted to know whether it was a valid assumption that the initial error mode for a process is zero....

Code
Jun 24, 2013
Post comments count0
Post likes count1

Drawing content at a fixed screen position, regardless of window position

Raymond Chen
Raymond Chen

Today's Little Program draws content at a fixed screen position. The idea is that the window is really a viewport into some magical world. Unfortunately, our magical world just has a sign that says "Booga booga." Creating a more interesting magical world is left as an exercise. Start with our scratch program and make these changes: void OnMov...

Code
Jun 21, 2013
Post comments count0
Post likes count1

Of what use is the RDW_INTERNALPAINT flag?

Raymond Chen
Raymond Chen

For motivational purposes, let's start with a program that displays a DWM thumbnail. Start with the scratch program and add the following: #include <dwmapi.h> HWND g_hwndThumbnail; HTHUMBNAIL g_hthumb; void UpdateThumbnail(HWND hwndFrame, HWND hwndTarget) { if (g_hwndThumbnail != hwndTarget) { g_hwndThumbnail = hwndTarget; if (g...

Code
Jun 19, 2013
Post comments count0
Post likes count1

AttachThreadInput is like taking two threads and pooling their money into a joint bank account, where both parties need to be present in order to withdraw any money

Raymond Chen
Raymond Chen

Consider this code: // Code in italics is wrong foregroundThreadId = ::GetWindowThreadProcessId(::GetForegroundWindow(), 0); myThreadId = GetCurrentThreadId(); if (foregroundThreadId != myThreadId) { AttachThreadInput(foregroundThreadId, myThreadId, TRUE); BringWindowToTop(myWindowHandle); If you try to step ov...

Code