This user has contributed 15 articles, 3 code samples and posted 0 messages in our discussion forums.
Articles & Tutorials
-
Learn two sorting algorithms, and how to use these to sort CListBox, ComboBox, and CListCtrl controls. 
-
Why you should never call UpdateData yourself. 
-
Why you should never call EnableWindow or other such calls except in one central place. Think of control enabling as a set of constraint equations. Much easier to maintain if the computations are centralized. Find out how I do it, and why I think this is a good way to do it.. 
-
Have you ever wanted a control that only accepted valid values and gave feedback to the user? This is a little project that illustrates the techniques for building a validating edit control.. 
-
The use of user-defined messages gives you additional power and control over your application, and provides an often convenient method for passing information between threads and applications. This essay goes into considerable depth on how to handle user-defined messages, inter-thread messages, and . 
-
When you create an Windows-related object in MFC, you are actually creating a "wrapper" around the underlying object. There are interactions between MFC and Windows which can get you into serious trouble if you are not careful. Read this to learn more.. 
-
This describes techniques for proper use of worker threads. It is based on several years' experience in programming multithreaded applications.. 
-
In Win16 it was easy: you looked at the hPrevInstance parameter to WinMain and if it was nonzero, you were the second instance. Done. In Win32 it isn't as easy. And there are several wrong ways, and some that don't work at all. This essay explores the techniques and tells you what the pitfalls are, . 
-
I discovered the utility of user-interface threads a few weeks ago. This essay captures what I learned. In particular, there are some interesting issues of thread initialization that are not readily addressed. This also discusses why a user-interface thread may have no GUI objects associated with it. 
-
Optimizing a program before you know where the time is going is a meaningless activity. It wastes your time, produces code that is harder to write, harder to debug, and harder to maintain, than unoptimized code. This essay discusses some of the issues of why you should not do pre-optimization.. 
-
OK, you've built the project, debugged it, and you're ready to ship. You compile the Release version of the program, and your world crumbles to dust. Find out what can be wrong, and what you can do about it. . 
-
Historically, checksums have been used to increase data transmission reliability, whether from a serial line or network, tape drive, or disk drive, among the many data sources that require reliability checking. However, checksums have other uses, such as in dialog box change-state maintenance, docum. 
-
My view: If you're writing more than one GetDlgItem per year, you're probably not using MFC correctly. Find out why, and what to do about it. . 
-
Having trouble keeping your DC intact? Here's an article on how to do this far more easily using ::SaveDC/::RestoreDC, or CDC::SaveDC/CDC::RestoreDC, as well as a C++ class to make it even easier. 
-
Some techniques for managing processes in a program. Oriented to MFC programmers, since it includes MFC examples and defines a class for asynchronous process completion notification.. 
Code Samples
-
GUIDs are a useful entity to guarantee that you have a unique name for a kernel object, Registered Window Message, clipboard format, or other object that must be guaranteed to be unique. However, there are times when a program needs to create a GUID; for example, a program that writes .h files. This essay tells how I created my own unique IDs. . 
-
This is a very simple subroutine that illustrates a technique for capturing the bitmap of an arbitrary window, and then shows how to save it to the clipboard.. 
-
This example consists of a simple dialog-based application that can launch another application and have the GUI remain alive while the launched process runs, instead of just blocking and being non-responsive.. 