You are on page 1of 48

Many past issues of MSJ are still available.

A list of articles by
issue can be found below. To see if the issues you are
interested in are still available, click here. To order online click
here. To order by mail or to inquire further about ordering use
the information below.
Rates per copy:
United States: $10 USD
Canada & Mexico: $12 USD
All Other International: $12 USD
Back issue orders must be prepaid. Rate includes shipping and
handling.
E-mail: orders@mfi.com
Phone (US and Canada residents): 800-444-4881
Phone (all other countries): 913-841-1631
FAX: 913-841-2624
Or write to:
MSJ Back Issues
c/o Miller Freeman, Inc.
1601 W. 23rd Street, Suite 200
Lawrence, KS 66046-2700

March 1998 Vol. 13 No.3


CODE MSJMAR98 (104,297 Bytes)
Pop Open a Privileged Set of APIs with Windows
NT Kernel Mode Drivers
Windows NT drivers are not just for devices; theyre a
means of doing things previously considered impossible.
Understanding them not only provides valuable insight
into Windows NT, it teaches you APIs you can use
without writing any driver code.
James Finnegan 19
Understanding the DCOM Wire Protocol by
Analyzing Network Data Packets
DCOM is simply a high-level network protocol that
enables COM-based components to interoperate across
a network. Youll explore DCOM by analyzing the data
packets transmitted across a network during the
execution of COM-enabled apps.
Guy and Henry Eddon 45
Why Do Certain Win32 Technologies Misbehave in
Windows NT Services?
Some Win32 technologies such as MFC, ODBC, and
MAPI behave differently in services than they do in
interactive user apps. There are three major areas of
concern for a service developer: security, window
stations and desktops, and registry hives. existing
WinHelp projects or build new HTML-based help

systems.
Frank Kim 67
Editor's Note
Joe Flanigen 5
Under the Hood
A handy feature of Windows NT is the performance
data counter which provides information about a system
like running processes, interrupts per second, network
I/O stats, etc. But the interface is horrible. There is an
API-based interface that is even accessible in Visual
Basic. Matt Pietrek covers it this month.
Matt Pietrek 77
Win 32 Q&A
Using the Task Manager in Windows NT to kill processes
and services.
Jeffrey Richter 83
ActiveX Q&A
No technology since the dawn of COM has been more
misunderstood than MTS, and no one aspect of MTS has
been more misunderstood than the issue of state. Don
Box puts the rumors to rest once and for all.
Don Box 89
C++ Q&A
How can you disable the tabs in a CTabCtrl? There's no
easy way. But you can almost always defeat Windows
if you're prepared to spend the time and the brain
power.
Paul DiLascia 99

February 1998 Vol. 13 No.2


CODE MSJFEB98 (390,785 Bytes)
May the Force Feedback Be with You: Grappling
with DirectX and DirectInput
Much of the gruntwork involved with game development
has been greatly simplified by DirectX 5.0. Jason Clark
introduces one of its components, DirectInput, plus
you'll see a sample application that demonstrates the
use of a force feedback joystick.
Jason Clark 19
Get Fast and Simple 3D Rendering with
DrawPrimitive and DirectX 5.0
DrawPrimitive, a brand new interface for 3D object
creation, aims to change the balkanized world of 3D
graphics development. Ron Fosner examines the use of
DrawPrimitive, a new interface that greatly improves the
usability of Direct3D.
Ron Fosner 37
Manipulate Windows NT Services by Writing a
Service Control Program
Every day, developers come up with new reasons to
build Windows NT services. If you're writing one, it's

important to understand service control programs


because they are the applications that allow
administration of your service.
Jeffrey Richter 55
Editor's Note
Joe Flanigen 5
Under the Hood
Welcome to Matt Pietrek's "Just-Enough-AssemblyLanguage-to-Get-By Guide," the source for
programmers who need to know at least a little
assembler to be able to debug compiled code.
Matt Pietrek 73
Bugslayer
In the December issue John Robbins introduced
TraceSrv, a utility that makes it simple to have all the
trace statements for your application go to the same
place, whether from multiple processes or from many
different machines. This month he shows you how to
implement TraceSrv in existing projects by calling a
single function.
John Robbins 87
Visual Programmer
The first round of tools for Windows CE 2.0 is out, and
this month we take a look at Visual C++ for Windows
CE 2.0 and show what you face in porting your MFC
applications to Windows CE.
George Shepherd and Scot Wingo 97
C++ Q&A
In general, how do you create a window class that's
exactly like one of the MFC default classes, but with one
or two modifications, and how do you get the class
name?
Paul DiLascia 101

January 1998 Vol. 13 No.1


CODE MSJJAN98 (414,655 Bytes)
How Microsoft Transaction Server Changes the
COM Programming Model
Microsoft Transaction Server isn't magic, but it does let
you write simple, COM-based servers that are powerful
and scalable. We'll give you five basic rules that will
actually make your object development with MTS easier.
David Chappell 19
Give Your Applications the Hot New Interface Look
with Cool Menu Buttons
This year's hot GUI look is the cool menus seen in Office
97. Just so you're not left wearing last year's rags, Paul
DiLascia explains how he implemented the cool menu
buttons and provides some reusable classes that you
can use in your own apps.
Paul DiLascia 31

The New HTML Help System Extends Online Help


From the Desktop to the Web
HTML Help allows seamless integration between local
and remote help files through your Web browser, HTML,
and ActiveX controls. With HTML Help Workshop, you
can convert your existing WinHelp projects or build new
HTML-based help systems.
Ted Faison 55
Editor's Note
Joe Flanigen 5
Under the Hood
Ever since Matt Pietrek wrote his PEDUMP article (MSJ,
March 1994), many people have asked how to access
the data for an arbitrary resource. Finding hidden dialog
controls was just the excuse he needed to write some
C++ classes that traverse the PE resource format.
Matt Pietrek 77
Win 32 Q&A
In an update to an earlier column, Jeffrey Richter
expands on some techniques for writing an unsetup
program that deletes itself from the disk.
Jeffrey Richter 85
ActiveX Q&A
Why would you want to find out the host address of the
caller inside a method? Can it be done? Ask Don Box
this month.
Don Box 89
C++ Q&A
I am writing an MFC app that is not a doc/view app. To
implement the app with MFC, I used a document object
that doesn't do anything. But I can't get the document
to display the right app name.
Paul DiLascia 103

December 1997 Vol. 12 No.12


CODE MSJDEC97 (296,844Bytes)
The COM+ Programming Model Makes it Easy to
Write Components in Any Language
COM+ makes the COM programming model more like
the programming model of the language you useyou
write classes in your favorite language; your tools and
the COM+ runtime take care of turning them into COM
components and applications.
Mary Kirtland 19
A Programmers Perspective on New System DLL
Features in Windows NT 5.0, Part II
This month, we look at additions to ADVAPI32, the shell,
the common controls, and COM. We'll also examine
additions to WININET.DLL and IMAGEHLP.DLL, plus the
new Shell Light Weight API and task scheduling
interfaces.

Matt Pietrek 31
Implementing the New Win32 Driver Model for
Windows 98 and Windows NT 5.0
Walter Oney finishes our introduction to the Win32
Driver Model by describing the handling of Plug and Play
and Power Management I/O requests and demonstrating
how a Virtual Device Driver running in Windows 98 can
call a WDM driver.
Walter Oney 43
Editor's Note
Joe Flanigen 5
Under the Hood
All of the programs that come with Windows NT are
compiled to use the Unicode. This month, Matt Pietrek
shows you why.
Matt Pietrek 71
Visual Programmer
Take advantage of scrolling, zooming, datazoom,
panning, and autoscroll with IntelliMouse.
George Shepherd and Scot Wingo 87
Bugslayer
Unfortunately, there are no debuggers yet that will allow
you to single-step across machines, or even step from
VBScript into a C++ control. Debugging modern
applications definitely isn't easy, but help is on the way.
John Robbins 89
C++ Q&A
Paul Dilascia once again helps us find our way in the
land of MFC. In this month's installment, we explore
tweaking the new Windows 95 common file dialogs
using CFileDialog.
Paul DiLascia 95

November 1997 Vol. 12 No.11


CODE MSJNOV97 (193,672 Bytes)
A Programmer's Perspective on New System DLL
Features in Windows NT 5.0, Part I
Windows NT 5.0 is on the way and MSJ's got the
information you need to know. We'll give you a peek at
what to expect from a programmer's perspective,
including changes to existing system DLLs, plus
information on some proposed new system DLLs.
Matt Pietrek 17
Surveying the New Win32 Driver Model for
Windows 98 and Windows NT 5.0
The Win32 Driver Modela new feature planned for
Windows 98 and Windows NT 5.0will simplify the
process of writing device drivers. This month, Walter
Oney introduces the basic architecture of this new
device driver model.
Walter Oney 35

Object-Oriented Software Development Made


Simple with COM+ Runtime Services
COM+ provides runtime services from any programming
language or tool, and it lets components work together
regardless of implementation. We'll review some major
object-oriented development issues and discuss how
COM+ will resolve many of them.
Mary Kirtland 49
Editor's Note
Joe Flanigen 5
Under the Hood
This month Matt Pietrek writes a program that compares
and contrasts Windows NT 4.0 and 5.0 system DLLs.
Matt Pietrek 61
Win32 Q&A
In a multithreaded application where the user-interface
thread is responsible for creating all of the windows and
running the message loop to dispatch messages, should
you synchronize the worker threads' access to the userinterface windows?
Jeffrey Richter 67
ActiveX Q&A
This month Don Box debunks common myths and
misconceptions that have surrounded COM over the
years.
Don Box 73
C++ Q&A
You have a network app with MFC where multiple copies
of the app on different workstations access the same
data file. How can you allow the first user that opens the
file to get read/write permission, and other users to get
the file read-only?
Paul DiLascia 83

October 1997 Vol. 12 No.10


CODE MSJOCT97 (193,672 Bytes)
Design a Windows NT Service to Exploit Special
Operating System Facilities
In Windows NT, a service is a type of executable that
gets special treatment from the operating system. We'll
explain how a service application must be designed to
take advantage of all the built-in features that Windows
NT offers.
Jeffrey Richter 19
Introducing the Bugslayer: Annihilating Bugs in an
Application Near You
In this sneak preview of our newest column, our
Bugslayer John Robbins illustrates some common
software development bugs you've probably
experienced and takes you through the steps of finding
and eradicating these pesky vermin.

John Robbins 35
A Preview of Active Channel and the Active
Desktop for Internet Explorer 4.0
Active Desktop technology in Internet Explorer 4.0 weds
the Internet to the Windows shell, creating a uniform
experience for working with information whether it
resides locally on your computer, on an intranet, or on
the Internet.
Nancy Winnick Cluts and Michael Edwards 59
Editor's Note
Joe Flanigen 5
Under the Hood
This month we'll take a look at Win32 exceptions
specific to the Intel x86 architecture, beginning with the
beloved GPF.
Matt Pietrek 71
Wicked Code
On 256-color display devices, a bitmap containing a
wide range of colors looks good only if you create a
palette to go with it. But you'll need to know what colors
to put in the palette.
Jeff Prosise 79
Visual Programmer
Using ATL in developing COM objects: The Active
Template Library (ATL) takes a load off developers by
implementing most of the boilerplate code necessary for
developing simple, straightforward COM classes. ATL
also serves as a lightweight alternative to MFC for
writing ActiveX controls.
George Shepherd and Scot Wingo 87
C++ Q&A
This month: Coolbars revisitedand fixed. Also
preventing users from running multiple instances of an
application using MFC.
Paul DiLascia 95

September 1997 Vol. 12 No.9


CODE MSJSEP97 (185,452 Bytes)
Manage Data from Myriad Sources with the
Universal Data Access Interfaces
ODBC, RDO, DAO, OLE DB: how do you find your data in
this alphabet soup of APIs? Universal Data Access spells
out a solution by providing access to your data through
a common set of interfaces, regardless of where the
data resides.
Stephen Rauch 17
Extend Developer Studio 97 with Your Own Addins, Macros, and Wizards
Why do menial programming work yourself when you
can harness the automation objects exposed by
Developer Studio to create add-ins, macros, and

wizards? These nifty features let you customize


Developer Studio like never before.
Steve Zimmerman 29
Multiple Threads in Visual Basic 5.0, Part II:
Writing a Win32 Debugger
Last month we began writing a multithreaded
application using Visual Basic 5.0. In this installment,
we build upon our previous work with the AddressOf
operator to develop VBDebug, a multithreaded debugger
for Win32-based applications.
John Robbins 45
Editor's Note
Joe Flanigen 5
Under the Hood
By observing calls made to the WININET.DLL during an
HTTP transaction, it's possible to create a program that
makes similar calls to the WININET APIs. Then you can
retrieve data from the internet without the overhead of
a browser.
Matt Pietrek 79
Win32 Q&A
This month Jeffrey Richter takes another look at the
GetShortPathName function and the SHGetFileInfo
function for converting to long file names. He also
covers writing a utility that copies the contents of a
ListView control to the clipboard.
Jeffrey Richter 91
ActiveX Q&A
You can mark your in-process CLSID as
ThreadingModel=Apartment or ThreadingModel=Both,
but why would you want to mark your CLSID as
ThreadingModel=Free? Why does this option exist?
Don Box 97
C++ Q&A
When you program Windows with MFC, it's important
to have a clear understanding of the difference between
the window that lives on the screen and the C++ CWnd
object that represents it.
Paul DiLascia 109

August 1997 Vol. 12 No.8


CODE MSJAUG97 (703,816 Bytes)
Ingenious Ways to Implement Multiple Threads in
Visual Basic 5.0, Part I
While the methodology may not seem obvious, it is
possible to write multithreaded applications in Visual
Basic 5.0 by using the AddressOf operator and some
Win32 APIs. Well explain how these facilities will help
you build a thread-safe application.
John Robbins 17
Fashionable App Designers Agree: The Free

Threading Model is Whats Hot This Fall


Worried that your apps looking tired wearing last years
threads? The simple, clean lines of the free threading
model cover you with only the barest minimum of
marshaling calls. Join us as we watch this sassy new
multithreading model work the runway.
David Platt 33
Microsoft Transaction Server Helps You Write
Scalable, Distributed Internet Apps
Microsoft Transaction Server (MTS) lets you concentrate
on the business logic of your Internet or intranet server
app. Our sample program takes you through the
fundamental MTS development and deployment steps.
Dave Reed, Tracey Trewin, and Mai-lan Tomsen 51
Editor's Note
Dave Edson 5
Under the Hood
This month, a different subset of the IMAGEHLP APIs to
show how their powerful features can be implemented
with a few simple lines of code.
Matt Pietrek 73
Wicked Code
Meet a fun little programming technique that will help
you write better drag and drop code. The sample
application uses MFC, but the technique isn't specific to
MFC; it's applicable to any language or development
environment.
Jeff Prosise 85
Visual Programmer
ActiveX Designer support in Visual Basic 5.0: An
ActiveX Designer is similar to a regular form in that you
use it to create Visual Basic classes. ActiveX Designerproduced classes fit into your application just as form
classes do.
George Shepherd and Scot Wingo 101
C++ Q&A
Implementing flat-style buttons in your toolbar: Believe
it or not, to get the flat-style toolbar you see in Internet
Explorer, all you have to do is add one line to your code.
Paul DiLascia 107

July 1997 Vol. 12 No.7


CODE MSJJUL97 (591,882 Bytes)
Create Apps That are Easily Extensible With Our
Smart "Snap-Ins" Methodology
Wouldn't it be great if other folks could write extensions
for your app? We'll show you how to implement a simple
in-process COM server approach we call "snap-ins." It
lets you write custom tools for your codeor any app
that supports snap-ins.

Steve Zimmerman 17
More First Aid for the Thread Impaired: Cool Ways
to Take Advantage of Multithreading
Multithreading can improve an app's performance,
responsiveness, and structure, but it also introduces
complexity. We'll show you how to perform feats like
responding to network outages gracefully and handling
error conditions asynchronously.
Russell Weisz 33
Dynamic Runtime Objects: Building Applications
Your Users Can Modify at Runtime
Dynamic runtime objects help keep big software
development projects under control by isolating object
dependencies. The result is an application that is well
organized and easy to changeeven by users, and even
at runtime.
Ed Smetak and Jean Caputo 49
Editor's Note
Dave Edson 5
Under the Hood
Linkers In-Depth: Get a guided tour through the
workings of the Win32 linker.
Matt Pietrek 77
Win32 Q&A
"Reverse Semaphore" Objects you can find code here to
implement something that works the exact opposite of a
Win32 semaphore.
Jeffrey Richter 85
ActiveX/COM
Explicit Constructors, Singleton COM Objects: Use
custom interfaces so new class objects can be created
and initialized automatically.
Don Box 93
C++ Q&A
File Open Dialogs and Tab Ordering: Extend the File
Open dialog in MFC so you can handle your own custom
file extensions.
Paul DiLascia 111

June 1997 Vol. 12 No.6


CODE MSJJUN97 (323,000 Bytes)
How to Exploit Multiple Monitor Support in
Memphis and Windows NT 5.0
Running out of screen space? Boss won't get you that
Jumbotron monitor? We'll detail new APIs through which
Memphis, the successor to Windows 95, and Windows
NT 5.0 will support a virtual desktop made up of
multiple monitors.
David Campbell 17
The Active Template Library Makes Building
Compact COM Objects a Joy

The Active Template Library (ATL) provides the


foundation for developing the lightweight COM
components that today's modern distributed apps
require. ATL lets you build small, self-contained apps
without the bother of additional runtime DLLs.
Don Box 41
More Fun with MFC: DIBs, Palettes, Subclassing,
and a Gamut of Goodies, Part III
In the conclusion to this series, Paul DiLascia completes
his MFC-based Quick View application and explains how
to build one of your own. He shows you how to use the
IFileViewer interface, and finishes off with some useful
debugging tips.
Paul DiLascia 69
Editors Note
Dave Edson 5
Under the Hood
Use our handy MouseWheel.dll to take advantage of the
mouse wheel found on the new Microsoft IntelliMouse.
Matt Pietrek 83
Wicked Code
Add the same smooth scrolling found in Internet
Explorer 3.0 to any MFC application by just dropping in
the class library presented here.
Jeff Prosise 99
The Visual Programmer
Learn how you can write add-ins for Microsoft Visual
Basic 5.0 to extend the programming environment to
suit your needs.
George Shepherd and Scot Wingo 105
C++ Q&A
Get that fancy caption shading found in Microsoft Office
for your MDI applications with our ShadeCap sample
code.
Paul DiLascia 109

May 1997 Vol. 12 No.5


CODE MSJMAY97 (619,839 Bytes)
Introducing Visual Studio 97: A Well-stocked
Toolbox for Building Distributed Apps
Visual Studio 97 targets developers and teams that
create dynamic, Web-based applications or other
distributed apps. Many of the additions to existing
Microsoft developer products are aimed at simplifying
the creation and use of ActiveX components.
Mary Kirtland 19
Visual C++ 5.0 Simplifies the Process for
Developing and Using COM Objects
Getting MSNCOM objects are becoming more and
more important. Many cool Windows features like shell

extensions and ActiveX are only available through COM.


Visual C++ 5.0 does COM right with new compiler
directives and integrated support for ATL.
George Shepherd 37
Investigating Multilanguage Debugging and the
New IDEs of Visual Studio 97
Using the right tool for building an application is one
thing, but what about debugging? Visual Studio
integrates Visual Basic and Visual C++ so you can code
different parts of your application with different
languages and debug them simultaneously.
Robert Schmidt 51
Under the Hood
IMAGEHLP.DLL has many useful functions that provide
services such as executable file modification, symbol
table access, and security certificate manipulation.
Matt Pietrek 79
Win32 Q&A
Specifying the location of special folders, such as My
Documents, without hardcoding the address.
Jeffrey Richter 91
ActiveX/COM
When creating COM objects with little interface, which
will be called by a variety of client languages, should
you build inproc servers or outtofproc servers?
Don Box 95
C++ Q&A
Writing an application that paints textured backgrounds
like those in Encarta and Bookshelf.
Paul DiLascia 113

April 1997 Vol. 12 No.4


CODE MSJAPR97 (619,839 Bytes)
The Windows CE SDK: The Tools You Need to
Program the Handheld PC
Neil Fishman and Jeffrey Richter 17
Behind the Scenes at MSN 2.0: Architecting an
Internet-Based Online Service
Alok Sinha, Don Clore, and Dale Phurrough 31
Tiptoe Through the Tooltips With our AllEncompassing ToolTip Programmers' Guide
Roger Jack 49
Under the Hood
Matt Pietrek 73
Wicked Code
Jeff Prosise 79
Visual Programmer
Shepherd and Wingo 87
C++ Q&A
Paul DiLascia 93

March 1997 Vol. 12 No.3


CODE MSJMAR97 (357,162 Bytes)
Pay No Attention to the Man Behind the Curtain!
Write Your Own C++ AppWizards
Walter Oney 19
Visual Basic 5.0 Relieves the Pain and Discomfort
of ActiveX Control Creation, Part II
Guy Eddon and Henry Eddon 37
More Fun with MFC: DIBs, Palettes, Subclassing,
and a Gamut of Goodies, Part II
Paul DiLascia 47
Under the Hood
Matt Pietrek 79
Win32 Q&A
Jeffrey Richter 85
ActiveX/COM
Don Box 93
C++ Q&A
Paul DiLascia 109

February 1997 Vol. 12 No.2


CODE MSJFEB97 (235,750 Bytes)
Give ActiveX-based Web Pages a Boost with the
Apartment Threading Model
David Platt 17
Building Multitiered Client/Server Apps with
Visual Basic 4.0 Enterprise Edition, Part II
Jenny Notestein 37
Visual Basic 5.0 Relieves the Pain and Discomfort
of ActiveX Control Creation
Guy Eddon and Henry Eddon 57
Under the Hood
Matt Pietrek 71
Wicked Code
Jeff Prosise 87
The Visual Programmer
George Shepherd and Scot Wingo 93
C++ Q&A
Paul DiLascia 101

January 1997 Vol. 12 No.1


CODE MSJJAN97 (264,815 Bytes)
More Fun with MFC: DIBs, Palettes, Subclassing,
and a Gamut of Reusable Goodies
Paul DiLascia 17
A Crash Course on the Depths of Win 32

Structured Exception Handling


Matt Pietrek 41
Hid Your Data and Make Objects Responsible for
Their Own User Interfaces, Part III
Allen Holub 67
Under the Hood
Matt Pietrek 83
Win 32 Q&A
Jeffrey Richter 89
ActiveX/COM Q&A
Don Box 93
C++ Q&A
Paul DiLascia 101

December 1996 Vol. 11 No.12


CODE MSJDEC96 (96,355 Bytes)
First Aid for the ThreadImpaired: Using Multiple
Threads with MFC
Russell Weisz 19
Hide Your Data and Make Objects Responsible for
Their Own User Interfaces, Part II
Allen Holub
Leveraging Your Visual C++ Experience on the
Internet with Thin Client Technology
David C. Mitchell 47
Under the Hood
Matt Pietrek 67
The Visual Programmer
Joshua Trupin 75
Wicked Code
Jeff Prosise 81
C++ Q&A
Paul DiLascia 89

November 1996 Vol. 11 No.11


CODE MSJNOV96 (387,424 Bytes)
Preview the Common Controls DLL for Microsoft
Internet Explorer 4.0, Part II
Strohm Armstrong 19
OpenGL Without the Pain: Creating a Reuseable
3D View Class for MFC
Ron Fosner 41
Building Multitiered Client/Server Apps with
Visual Basic 4.0 Enterprise Edition
Jenny Notestein 57
Under the Hood
Matt Pietrek 75
Win32 Q&A

Jeffrey Richter 85
ActiveX/COM Q&A
Don Box 91
C++ Q&A
Paul DiLascia 101

October 1996 Vol. 11 No.10


CODE MSJOCT96 (775,272 Bytes)
Remove Fatty Deposits from Your Applications
Using Our 32-bit Liposuction Tools
Matt Pietrek 19
What You Need to Know about "Pegasus,"
Microsoft's Uncoming Handheld Device
Jeffrey Richter 41
Previewing the New and Improved Common
Controls DLL for Microsoft IE 4.
Strohm Armstrong 53
Under the Hood
Matt Pietrek 77
The Visual Programmer
Josh Trupin 87
Wicked Code
Jeff Prosise 95
C++ Q&A
Paul DiLascia 109

September 1996 Vol. 11 No.9


CODE MSJSEP96 (266,785 Bytes)
Unified Browsing with ActiveX Extensions Brings
the Internet to Your Desktop
Stephen Rauch 19
Our Exclusive Class Library Speeds Building
Windows NT Kernol Mode Device Drivers
John Elliott and Jeff Huckins 35
Visual C++ 4.2 Dramatically Reduces the
Learning Curve for Writing Internet Apps
Nancy Nicholaisen 69
Under the Hood
Matt Pietrek 77
Win32 Q&A
Jeffrey Richter 91
OLE Q&A
Don Box 97
C++ Q&A
Paul DiLascia 103

August 1996 Vol. 11 No.8

CODE MSJAUG96 (392,629 Bytes)


Poking Around Under the Hood: A Programmer's
View of Windows NT 4.
Matt Pietrek 19
To Learn About the Voice Modem Extensions for
Windows 95, Press 1 Now!
Charles Mirho 39
Hide Your Data and Make Objects Responsible for
Their Own Interface
Allen Holub 53
Under the Hood
Matt Pietrek 79
C++ Q&A
Paul DiLascia 87
Wicked Code
Jeff Prosise 97

July 1996 Vol. 11 No.7


CODE MSJJUL96 (600,944 Bytes)
Talk to Any Database the COM Way Using the OLE
DB Interface
Stephen Rauch 19
Extending the Windows Explorer with Name
Space Extensions
David Cambell 41
Safe Web Surfing with the Internet Component
Download Service
Mary Kirtland 65
Under the Hood
Matt Pietrek 75
Win32 Q&A
Jeffrey Richter 83
C++ Q&A
Paul DiLascia 91

June 1996 Vol. 11 No.6


CODE MSJJUN96 (523,780 Bytes)
How COM Solves the Problems of
Component Software Design, Part II
Kraig Brockschmidt 19
Roll Your Own Persistence Implementations to Go
Beyond the MFC Frontier
Allen Holub 31
The Visual Programmer Puts ActiveX Document
Objects Through Their Paces
Joshua Trupin 55
Under the Hood

Matt Pietrek 79
OLE Q&A
Don Box 85
C/C++ Q&A
Paul DiLascia 99

May 1996 Vol. 11 No.5


CODE MSJMAY96 (1,291,942 Bytes)
Introducing Distributed COM and the New OLE
Features in Windows NT 4.
Don Box 19
Writing Interactive Web Apps is a Piece of Cake
with the New ISAPI Classes in MFC 4.
Mike Blaszczak 41
How OLE and COM Solve the Problems of
Component Software Design
Kraig Brockschmidt 63
Under the Hood
Matt Pietrek 83
Win 32 Q&A
Jeffrey Richter 91
The Visual Programmer
Joshua Trupin 95
C/C++ Q&A
Paul DiLascia 99

April 1996 Vol. 11 No.4


CODE MSJAPR96 (843,908 Bytes)
Build OLE Controls for the Internet that are Fast,
Smart, and Interactive
Michael McKeown 19
Programming Windows 95 with MFC, Part VIII:
Printing and Print Previewing
Jeff Prosise 39
Fusing Your Applications to the System Through
the Windows 95 Shell
Jeffrey Richter 61
Under the Hood
Matt Pietrek 75
OLE Q&A
Don Box 89
The Visual Programmer
Joshua Trupin 103
C/C++ Q&A
Paul DiLascia 107

March 1996 Vol. 11 No.3

CODE MSJMAR96 (702,356 Bytes)


The Visual Programmer Fingers WinSock
Functions from Visual Basic
Joshua Trupin 19
Extend Windows 95 Shell Application Desktop
Toolbars
Jeffrey Richter 35
Exploring the Client/Server Capabilities of Visual
Basic
4.0 Enterprise Edition
Guy Eddon and Henry Eddon 55
Under the Hood
Matt Pietrek 77
Win 32 Q&A
Jeffrey Richter 87
C/C++ Q&A
Paul DiLascia 103

February 1996 Vol. 11 No.2


CODE MSJFEB96 (497,793 Bytes)
Programming Windows 95 with MFC, Part VII:
The Document/View Architecture
Jeff Prosise 19
Write a Simple HTTP-based Server Using MFC and
Windows Sockets
David Cook 43
Get World-Class Noise and Total Joy from Your
Games with DirectSound and DirectInput
Dave Edson 71
Under the Hood
Matt Pietrek 85
The Visual Programmer
Joshua Trupin 93
OLE Q&A
Don Box 99
C/C++ Q&A
Paul DiLascia 107

January 1996 Vol. 11 No.1


CODE MSJJAN96 (395,317 Bytes)
Talk to Your Computer and Have It Answer Back
with the Microsoft Speech API
Mike Rozak 19
The DAO of Databases: Using Data Access Objects
and the Jet Engine in C++
Michael Mee, Peter Tucker, and John McCullough 35
Automatically Configure Your Devices by

Exploiting Plug and Play VxD Services


Waler Oney 57
The Visual Programmer
Joshua Trupin 81
Under the Hood
Matt Pietrek 87
Win 32 Q&A
Jeffrey Richter 93
C/C++ Q&A
Paul DiLascia 103

December 1995 Vol. 10 No.12


CODE MSJDEC95 (166,275 Bytes)
MFC 4.0 Delivers OCX Containers, Improved DLL
Models, and New Classes
Bob Chiverton 19
Building Device Drivers That Conform to
Windows 95 Plug and Play Standards
Walter Oney 35
Programming Windows 95 with MFC, Part VI:
Dialog Boxes, Property Sheets, and Controls
Jeff Prosise 53
Under the Hood
Matt Pietrek 75
OLE Q&A
Don Box 83
C/C++ Q&A
Paul DiLascia 99

November 1995 Vol. 10 No.11


CODE MSJNOV95 (321,838 Bytes)
The Game SDK for Windows 95 Gives You Direct
Hardware Control for Speedy Annimation
Dave Edson 15
Programming Windows 95 with MFC, Part V:
Menus, Toolbars, and Status Bars
Jeff Prosise 41
How to Navigate the Treacherous Waters of C++
Exception Handling
Scott Meyers 61
Under the Hood
Matt Pietrek 77
Win 32 Q&A
Jeffrey Richter 85
C/C++ Q&A
Paul DiLascia 89

October 1995 Vol. 10 No.10


CODE MSJOCT95 (293,569 Bytes)
Add Growable Memory-Mapped Files to Your App
with Our Exclusive GMMF API
Jeffrey Richter 17
Visual Basic 4.0 Provides Easy Entry to the
Advanced Features of Windows
Joshua Trupin 35
How to Get Your Windows 95 OLE Controls
Refined, Robust, and Ready to Ship
Michael McKeown 67
Under the Hood
Matt Pietrek 83
OLE Q&A
Don Box 91
C/C++ Q&A
Paul DiLascia 99

September 1995 Vol. 10 No.9


CODE MSJSEP95 (454,483 Bytes)
An Exclusive Tour of the New TOOLHELP32
Functions for Windows
Matt Pietrek 15
Programming Windows 95 with MFC, Part IV:
Contending with the Keyboard
Jeff Prosise 35
Developing Client/Server Multimedia App Using
RPCs and Video for Windows 1.
James Finnegan 53
Under the Hood
Matt Pietrek 73
Win 32 Q&A
Jeffrey Richter 81
C/C++ Q&A
Paul DiLascia 89

August 1995 Vol. 10 No.8


CODE MSJAUG95 (393,216 Bytes)
Rewriting the MFC Scribble Program Using an
Object-Oriented Design Approach
Allen Holub 17
Tips and Tricks on Developing Killer Server
Applications for Windows NT
Martin Heller 41
Programming Windows 95 with MFC, Part III:
Processing Mouse Input
Jeff Prosise 57

OLE Q&A
Don Box 77
Windows Q&A
Matt Pietrek 91
C/C++ Q&A
Paul DiLascia 99

July 1995 Vol. 10 No.7


CODE MSJJUL95 (408,832 Bytes)
Meandering Through the Maze of MFC Message
and Command Routing
Paul DiLascia 17
Programming Windows 95 with MFC, Part II:
Working with DCs, Pens, and Brushes
Jeff Prosise 39
Design and Implementation Details of the
Windows NT Virtual Block Cache Manager
Helen Custer 67
Windows Q&A
Matt Pietrek 83
Win 32 Q&A
Jeffrey Richter 93
C/C++ Q&A
Paul DiLascia 99

June 1995 Vol. 10 No.6


CODE MSJJUN95 (2,160,578 Bytes)
Wake Up and Smell the MFC: Using the Visual C+
+ Classes and Application Framework
Jeff Prosise 17
Borland Delphi: A New Entry in the Pantheon of
Visual Programming Tools
Joshua Trupin 37
Port Your Windows-based App to the Mac with
the Visual C++ Cross-Development Edition
Guy Eddon and Henry Eddon 53
OLE Q&A
Don Box 71
Windows Q&A
Matt Pietrek 81
C/C++ Q&A
Paul DiLascia 87

May 1995 Vol. 10 No.5


CODE MSJMAY95 (271,364 Bytes)
Grab Bag of Gotchas and Goodies for

Programming in Windows
Dave Edson 19
Extend Your Application with Dynamically Loaded
VxD's Under Windows
Walter Oney 39
Design Considerations for Implementing a Simple
OLE Automation Controller
Kraig Brockschmidt 57
Windows
Q&A
Matt Pietrek 79
C/C++ Q&A
Paul DiLascia 93
MS-DOS Q&A
Jeff Prosise 101

April 1995 Vol. 10 No.4


CODE MSJAPR95 (653,893 Bytes)
Understanding Windows 95 Memory
Management: Paging, Address Spaces, and
Contexts
Matt Pietrek 19
Implementing OLE Control Containers with MFC
and the OLE Control Developer's Kit
Mike Blaszczak 37
Build a Multilingual User Interface for Your
Application with Win 32
Asmus Freytag 61
Windows Q&A
Matt Pietrek 83
Win32 Q&A
Jeffrey Richter 91
C/C++ Q&A
Paul DiLascia 97

March 1995 Vol.10 No.3


CODE MSJMAR95 (159,195 Bytes)
Integrate Your Applications with the Windows
95 User Interface Using Shell Extensions
Jeff Prosise 19
Optimize Your Code to Run Faster and Jump
Higher with the Visual C++ 2.0 Compiler
Simon Koeman and Jeff Ross 51
The BOCOLE Engine and OCF Class Library Make
Programming OLE Easier
Ted Faison 67
Windows Q&A
Matt Pietrek 95

C/C++ Q&A
Paul DiLascia 101
MS-DOS Q&A
Jeff Prosise 107

February 1995 Vol.10 No.2


CODE MSJFEB95 (622,947 Bytes)
Understanding Modelview Transformations in
OpenGL for Windows NT
Jeff Prosise 19
Putting Your OLE Controls to Work with
Microsoft Access, Visual Basic, and C++
Joshua Trupin 45
Efficient Synchronization Techniques for
Multithreaded Win32-based Applications
Daniel Glasser 61
Windows Q&A
Matt Pietrek 83
C/C++ Q&A
Paul DiLasica 89
Win32 Q&A
Jeffrey Richter 97

January 1995 Vol.10 No.1


CODE MSJJAN95 (1,871,508 Bytes)
Exploit Video for Windows 1.1 With Visual C++
and Our Exclusive MFC Extensions
Paul DiLascia 17
The Windows Cartoon Engine Supplies High
Quality Animation to Any Application
William Wagner 37
Implementing Games for Windows Using the
Win API and the WaveMix DLL
James Finnegan 61
Windows Q&A
Matt Pietrek 83
C/C++ Q&A
Paul DiLasica 91
MS-DOS Q&A
Jeff Prosise 95

December 1994 Vol.9 No.12


CODE MSJDEC94 (248,131 Bytes)
Learn System-Level Win32 Coding Techniques by
Writing and API Spy Program
Matt Pietrek 17

Internationalizing Your Win32-based


Applications for Windows NT and Windows
Nadine Kano and Asmus Freytag 49
Create Communications Programs for Windows
95 With the Win32 Comm API
Charles Mirho and Andy Terrice 67
Windows Q&A
Matt Pietrek 87
Win32 Q&A
Jeffrey Richter 95
C/C++ Q&A
Paul DiLascia 99

November 1994: Vol.9 No.11


CODE MSJNOV94 (369,176 Bytes)
Examining the Peer-to-Peer Connectivity and
Multiple Network Support of Chicago
Adrian King 15
Advanced Graphics for Windows NT 3.5:The
OpenGL Interface, Part II
Jeff Prosise 33
The International Character Set Conundrum:ANSI,
Unicode, and Microsoft Windows
Nadine Kano and Asmus Freytag 55
Windows Q&A
Matt Pietrek 73
C/C++ Q&A
Paul DiLascia 83
MS-DOS Q&A
Jeff Prosise 90

October 1994: Vol.9 No.10


CODE MSJOCT94 (1,040,056 Bytes)
Advanced 3-D Graphics for Windows NT
3.5:Introducing the OpenGL Interface, Part I
Jeff Prosise 15
Chicago's Interface Gadgets, PartIII:
Programming Properly with Property Sheets
Dave Edson 33
Building Windows NT-Based Client/Server
Applications Using Remote Procedure Calls
James Finnegan 65
Windows Q&A
Matt Pietrek 81
Win32 Q&A
Jeffrey Richter 87
C/C++ Q&A
Paul DiLascia 93

September 1994: Vol.9 No.9


CODE MSJSEP94 (1,345,936 Bytes)
Investigating the Hybrid Windowing and
Messaging Architecture of Chicago
Matt Pietrek 15
Building Component Software With Visual C++
and the OLE Custom Control Developer's Kit
Eric Lang 33
Getting Wired Into the Internet: A Crash Course
on FTP, Gopher, Web, and More
J.Allard and Steven Sinofsky 53
Windows Q&A
Matt Pietrek 69
C/C++ Q&A
Paul DiLascia 81
MS-DOS Q&A
Jeff Prosise 87

August 1994: Vol 9 No. 8


CODE MSJAUG94 (1,724,817 Bytes)
Unconstrained Filenames on the PC! Introducing
Chicago's Protected Mode FAT File System
Walter Oney 13
Stepping Up to 32 Bits: Chicago's Process, Thread,
and Memory Management
Matt Pietrek 27
Chicago's Interface Gadgets, Part II: Toolbars,
Status Bars, and RichEdit Control
Dave Edson 45
Windows Q&A
Matt Pietrek 79
Win32 Q&A
Jeffrey Richter 87
C/C++ Q&A
Paul DiLascia 91

July 1994: Vol 9 No. 7


CODE MSJJUL94 (1,013,025 Bytes)
Cleverly Coding with Chicago's Interface Gadgets,
Part I: Image Lists and TreeViews
Dave Edson 13
Visual C++2.0 Features Better Editors, Faster
Builds, and C++ Exceptions and Templates
Bob Chiverton 37
Internationalization in Windows NT Part II:

Locales, Languages, and Resources


William S. Hall 55
Windows Q&A
Matt Pietrek 77
C/C++ Q&A
Paul DiLascia 83
MS-DOS Q&A
Jeff Prosise 89

June 1994: Vol 9 No. 6


CODE MSJJUN94 (726,467 Bytes)
Test Drive Win32 from 16-bit Code Using the
Windows NT WOW Layer and Generic Thunk
James Finnegan 13
A Primer on Building Server-Style DLLs for
Windows with MFC 2.5 and OWL
Ted Faison 43
Internationalization in Windows NT Part I:
Programming with Unicode
William S. Hall 57
Windows Q&A
Matt Pietrek 73
Win32 Q&A
Jeffrey Richter 79
C/C++ Q&A
Paul DiLascia 85

May 1994: Vol. 9 No. 5


CODE MSJMAY94 (115,179 Bytes)
Load Your 32-bit DLL into Another Process's
Address Space Using INJLIB
Jeffrey Richter 13
Going Beyond WordBasic: Extending Word 6.0 for
Windows With WLLs
Dave Edson 41
Memory Management, the Win32 Subsystem,
and Internal Synchronization in Chicago
Adrian King 57
Windows Q&A
Matt Pietrek 63
C/C++ Q&A
Paul DiLascia 71
MS-DOS Q&A
Jeff Prosise 77

April 1994: Vol. 9 No. 4

CODE MSJAPR94 (90,453 Bytes)


OLE Made Almost Easy: Creating Containers and
Servers Using MFC 2.
Paul DiLascia 13
Removing Bottlenecks from Your Program with
Windows NT Performance-tuning Tools
Walter Oney 35
Simplify Access to Complex Multimedia Devices
with the Media Control Interface
Jeff Prosise 55
Win32 Q&A
Jeffrey Richter 71
Windows Q&A
Matt Pietrek 79
C/C++ Q&A
Paul DiLascia 85

March 1994: Vol. 9 No. 3


CODE MSJMAR94 (290,750 Bytes)
Peering Inside the PE: A Tour of the Win32
Portable Executable File Format
Matt Pietrek 15
Simplify and Enhance Your Application's User
Interface with Dynamic Dialog Boxes
Atif Aziz 39
A Programmer's Potpourri of Value-Added Tools
for Visual C++ and MFC
David Thielen 71
Windows Q&A
Matt Pietrek 83
MS-DOS Q&A
Jeff Prosise 89
C/C++ Q&A
Paul DiLascia 93

February 1994: Vol. 9 No. 2


CODE MSJFEB94 (222,758 Bytes)
Seventeen Techniques for Preparing Your 16-bit
Applications for Chicago
Dave Edson 15
Application Interoperability with Visual Basic for
Applications and OLE 2.
Joshua Trupin 29
Putting the OWL 2.0 Class Library for Windows
Through Its Paces
Ted Faison 45
Win32 Q&A
Jeffrey Richter 69

Windows Q&A
Matt Pietrek 79
C/C++ Q&A
Paul DiLascia 85

January 1994: Vol. 9 No. 1


CODE MSJJAN94 (68,163 Bytes)
Windows, the Next Generation: An Advance Look
at the Architecture of Chicago
Adrian King 15
Clearer, More Comprehensive Error Processing
with Win32 Structured Exception Handling
Kevin Goodman 29
Hook and Monitor Any 16-bit Windows Function
With Our ProcHook DLL
James Finnegan 45
Windows Q & A
Matt Pietrek 77
C/C++ Q & A
Paul DiLascia 83
MS-DOS Q & A
Jeff Prosise 89

December 1993: Vol. 8 No. 12


CODE MSJDEC93 (678,121 Bytes)
Reach Out and Touch Someone's PC: The
Windows Telephony API
Charles Mirho and Andrew Raffman 15
Implementing OLE 2.0, Part III: Uniform Data
Transfer with Data Objects
Kraig Brockschmidt 47
Fundamental Techniques for Sprite Animation in
Windows-based Applications
Guy R. Eddon 81
Windows Q & A
Matt Pietrek 89
C/C++ Q & A
Paul DiLascia 95
MS-DOS Q & A
Jeff Prosise 101

November 1993: Vol. 8 No. 11


CODE MSJNOV93 (224,447 Bytes)
Fun with MFC: 33 Tips to Help You Get the Most
Out of C++ Class Libraries for Windows
Paul DiLascia 17

Mix 16-bit and 32-bit Code in Your Applications


with the Win32s Universal Thunk
Walter Oney 39
An Overview of Network Programming Interfaces
for Windows and Windows NT
Steven Baker 61
C/C++ Q & A
Paul DiLascia 79
Windows Q & A
Matt Pietrek 85
MS-DOS Q & A
Jeff Prosise 97

October 1993: Vol. 8 No. 10


CODE MSJOCT93 (91,462 Bytes)
What's the Difference Between Windows and
Tasks in Windows 3.1?
Matt Pietrek 17
Coordinate Win32 Threads Using Manual-Reset
and Auto-Reset Events
Jeffrey Richter 35
An MSJ Interview with Microsoft's Chief Architect
of OLE, Tony Williams
Sara Williams 55
Windows Q & A
Matt Pietrek 69
C/C++ Q & A
Paul DiLascia 81
MS-DOS Q & A
Jeff Prosise 93

September 1993: Vol. 8 No. 9


CODE MSJSEP93 (1,718,913 Bytes)
Harnessing the Database Access and OLE Support
Capabilities of Visual Basic 3.
Joshua Trupin 15
Slay the Porting Beasties: Dave's Top Ten Tips for
Migrating to Windows NT
Dave Edson 37
OLE 2.0, Part II: Implementing a Simole
Windows Object Using Either C or C++
Kraig Brockschmidt 49
C/C++ Q & A
Paul DiLascia 79
MS-DOS Q & A
Jeff Prosise 87

August 1993: Vol. 8 No. 8


CODE MSJAUG93 (409,556 Bytes)
Introducing OLE 2.0, Part I: Windows Objects
and the Component Object Model
Kraig Brockschmidt 15
Synchronizing Win32 Threads Using Critical
Sections, Semaphores, and Mutexes
Jeffrey Richter 27
Port Your 16-bit Applications to Windows NT
Without Ripping Your Hair Out
Scot Gellock 47
Windows Q & A
Fran Finnegan 67
C/C++ Q & A
Paul DiLascia 73
MS-DOS Q & A
Jeff Prosise 75

July 1993: Vol. 8 No. 7


CODE MSJJUL93 (112,874 Bytes)
Liposuction Your Corpulent Executables and
Remove Excess Fat
Matt Pietrek 15
Plug into Serious Network Programming with the
Windows Sockets API
J. Allard, Keith Moore, and David Treadwell 35
Creating, Managing, and Destroying Processes and
Threads under Windows NT
Jeffrey Richter 55
Windows Q & A
Fran Finnegan 79
C/C++ Q & A
Paul DiLascia 83
MS-DOS Q & A
Jeff Prosise 87

June 1993: Vol. 8 No. 6


CODE MSJJUN93 (900,100 Bytes)
Visual C++ Enters the Ring Swinging and Scores
a Technical Knockout
Bob Chiverton 15
Surveying New Capabilities of the Microsoft
Foundation Class Library Version 2.
Richard Hale Shaw 41
Visual C++: Its Compiler, Language
Implementation, and Code Quality
Allen Holub 65

Windows Q & A
Fran Finnegan 79
C/C++ Q & A
Paul DiLascia 85
MS-DOS Q & A
Jeff Prosise 95

May 1993: Vol. 8 No. 5


CODE MSJMAY93 (184,650 Bytes)
MS-DOS 6 Offers Automatic Memory
Configuration and Integrated Disk Compression
Jeff Prosise 13
Run Privileged Code from Your Windows-based
Program Using Call Gates
Matt Pietrek 29
Dr. Strangerelease; or How I Learned to Stop
Worrying and Love Version Control Systems
Joshua Trupin 43
Windows Q & A
Fran Finnegan 67
C/C++ Q & A
Paul DiLascia 77
MS-DOS Q & A
Jeff Prosise 80

April 1993: Vol. 8 No. 4


CODE MSJAPR93 (719,465 Bytes)
At Last-Write Bona Fide 32-bit Program that Run
on Windows 3.1 Using Win32s
Andrew Schulman 15
It's a Raid! Putting Four Debuggers for for
Windows Through Their Paces
Charles Mirho 35
Memory-Mapped Files in Windows NT Simplify
File Manipulation and Data Sharing
Jeffrey Richter 57
Windows Q & A
Fran Finnegan 71
C/C++ Q & A
Paul DiLascia 77
MS-DOS Q & A
Jeff Prosise 85

March 1993: Vol. 8 No. 3


CODE MSJMAR93 (453,200 Bytes)
An Introduction to Win32 Heap and Virtual

Memory Management Routines


Jeffrey Richter 15
A Look under the Hood of the Windows 3.1
Global Heap and the Functions that Maintain It
Matt Pietrek 39
MFC Diagnostic Facilities Part II: MoreSophisticated Debugging Techniques
Brian Meyers 55
Windows Q & A
Fran Finnegan 71
MS-DOS Q & A
Jeff Prosise 85

February 1993: Vol. 8 No. 2


CODE MSJFEB93 (153,959 Bytes)
Call VxD Functions and VMM Services Easily Using
Our Generic VxD
Andrew Schulman 17
Built-in Diagnostic Facilities in The Microsoft
Foundation Classes Simplify Debugging
Brian Meyers 41
Putting Your Best Face Forward: Designing an
Effective User Interface
Maria R. Capucciati 55
Windows Q & A
Fran Finnegan 67
C/C++ Q & A
Paul DiLascia 77
MS-DOS Q & A
Jeff Prosise 83

January 1993: Vol. 8 No. 1


CODE MSJJAN93 (758,041 Bytes)
It's not Just for Prototypes Any More: Extra Power
and Controls Enhance Visual Basic 2.
Joshua Trupin 15
Video for Windows Brings Interleaved Audio and
Full-Motion Digital Video to the PC
Charles Petzold 41
Network DDE in Windows for Workgroups 3.1
Bridges Programs Between PCs
Kraig Brockschmidt 61
Windows Q & A
Fran Finnegan 79
C/C++ Q & A
Bob Chiverton 85
MS-DOS Q & A
Jeff Prosise 89

December 1992: Vol. 7 No. 8


Exploring Demand-Paged Virtual Memory in
Windows Enhanced Mode
Andrew Schulman 17
Simulating Keyboard Input Between Programs
Requires a (key) Stroke of Genius
Jeffrey Richter 43
Simplify Client-Server Applications Using the DDE
Management Library
Gordon S. Smith 61
Windows Q & A
Fran Finnegan 79
C/C++ Q & A
Steven Sinofsky 85
MS-DOS Q & A
Jeff Prosise 89

November 1992: Vol. 7 No. 7


Programming Windows with a Touch of Class:
The Microsoft Foundation Classes
Richard Hale Shaw 19
Extend the Functionality of the Windows Control
Panel with Custom DLLs
Greg Keyser 45
Developing Automated Testing Procedures with
Microsoft Test and TestBasic Scripts
Daniel A. Norton 63
Windows Q & A
Fran Finnegan 81
MS-DOS Q & A
Jeff Prosise 87
C/C++ Q & A
Bob Chiverton 95

October 1992: Vol. 7 No. 6


Go Anywhere and Do Anything with 32-bit Virtual
Device Drivers for Windows
Andrew Schulman 15
Dave's Top Ten List of Tricks, Hints, and
Techniques for Programming in Windows
Dave Edson 31
Streamline Your Program's Setup with the Version
Control and Decompression DLLs
Jeffrey Richter 61
Windows Q & A
Fran Finnegan 77
MS-DOS Q & A
Jeff Prosise 83

C/C++ Q & A
Bob Chiverton 89

September 1992: Vol. 7 No. 5


Do More with Less Code: Pare Down Your
Windows-based Applications Using C++
Richard Hale Shaw 15
GDI Comes of Age: Exploring the 32-bit Graphics
of Windows NT
Charles Petzold 41
An Overview of Codewright, an IndustrialStrength Editor for Windows
Jeffrey Richter 61
Windows Q & A
Fran Finnegan 75
MS-DOS Q & A
Jeff Prosise 81
C/C++ Q & A
Bob Chiverton 87

July/August 1992: Vol. 7 No. 4


A Grand Tour of Windows NT: Portable 32-bit
Multiprocessing Comes to Windows
Helen Custer 17
The Case for 32 Bits
Charles Petzold 32
An Introduction to Windows NT Memory
Management Fundamentals
Paul Yao 41
Developing Network-aware Programs Using
Windows 3.1 and NetBIOS
Ray Patch and Alok Sinha 57
Safer Functions for Working with MS-DOS Files
David Thielen 79
Windows Q & A
Fran Finnegan 95
MS-DOS Q & A
Jeff Prosise 105
C/C++ Q & A
Steven Sinofsky 111

May/June 1992: Vol. 7 No. 3


Drop Everything: How to Make Your Application
Accept and Source Drag-and-Drop Files
Jeffrey Richter 19
Explore Previously Uncharted Areas of Windows
Using the ToolHelp Library
Paul Yao 37
How to Track, Isolate, and Exterminate Bugs in

Your Windows-based Applications


Dave Edson 69
Investigating Object Linking and Embedding, Part
II: Adding Server Support
Paul Klemond 87
Windows Q & A
Fran Finnegan 99
MS-DOS Q & A
Jeff Prosise 105
C/C++ Q & A
Kaare Christian 108

March/April 1992: Vol. 7 No. 2


Taking the Bull by the Horns: Investigating Object
Linking and Embedding, Part I
Paul Klemond 19
A Preview of Microsoft C/C++ 7 and the
Microsoft Foundation Classes for Windows
Richard Hale Shaw 43
An Introduction to Network Programming Using
the NetBIOS Interface
Alok Sinha and Ray Patch 61
A Primer on Designing Custom Controls
Kraig Brockschmidt 87
Windows Q & A
Fran Finnegan 103
MS-DOS Q & A
Jeff Prosise 109
C/C++ Q & A
Kaare Christian 113

Nov/Dec 1991: Vol. 6 No. 6


Windows 32-Bit API Gives Developers Advanced
Operating System Capabilities
Paul Yao 15
Adapt Your Program for Worldwide Use with
Windows Internationalization Support
William S. Hall 29
QuickC for Windows, a Complete Graphical
Environment for Easier Windows Programming
Richard Hale Shaw 65
Shoot-out at the OK Button Corral: Comparing
Application Generators
Marc Adler 87
DOS Q & A
Jeff Prosise 113
Windows Q & A
Fran Finnegan 119

Sept./Oct. 1991: Vol. 6 No. 5


Windows Version 3.1--Hello to TrueType, OLE,
and Easier DDE; Farewell to Real Mode
Charles Petzold 17
Careful Windows Resource Allocation and
Cleanup Improves Application Hygiene
Paul Yao 31
What's in There? Windows 3.0 Executable and
Resource File Formats Revealed!
Kevin P. Welch 43
Porting DOS Programs to Protected-Mode
Windows with the WINDOS Library
Andrew Schulman 79
Micrsoft Source Profiler Helps Tune DOS,
Windows, and OS/2 Applications
Richard Hale Shaw 101
Windows Q & A
Fran Finnegan 119

July 1991: Vol. 6 No. 4


Less Filing, Tastes Great: A Programmer's Survey
of MS-DOS Version
David Thielen 17
Call Standard C I/O Functions from Your
Windows Code Using the WINIO Library
David Maxey and Andrew Schulman 33
Create Real Windows Applications in a Graphical
Environment Using Microsoft Visual Basic
Laura Euler, Eric Maffei, and Adam Rauch 57
Accurately Timing Windows Events Without
Timer Reprogramming
Jerry Jongerius 75
Converting Foreign Bitmaps to Windows DeviceIndependent Bitmaps
C. Albert Mirho 85
An Overview of Windows 3.0 3.0 Development
Tools
Marc Adler 99
Windows Q & A
Fran Finnegan 111

May 1991: Vol. 6 No. 3


Postman, a Handy Windows Debugging Tool,
Lets you Post Messages to Any Window
Bob Chiverton 21
Borland C++ 2.0 Provides a Comprehensive
Windows Development Environment
Richard Hale Shaw 45
Embedded Device Drivers Simplify the Support of
Unusual Devices Under Windows

Gordon S. Smith 63
Designing the Client Portion of a LAN Manager
Client-Server Application
Ray Patch and Alok Sinha 89
Unconventional Thoughts on Managing PC
Software Development
David Thielen 111
Learning Windows Part IV: Bitmaps, Fonts, and
Printing
Marc Adler 115
Windows Q & A
Fran Finnegan 153

March 1991: Vol. 6 No. 2


The Multimedia Extensions for Windows-Enhanced Sound and Video for the PC
Charles Petzold 19
Analyzing the Optimization Techniques Compilers
Use to Transform Your C Code
Richard Hale Shaw 29
Turning the Performance of Windows and OS/2
Programs with MicroQuill's Segmentor
Paul Yao 49
Porting 32-bit Applications to Windows 3.0 with
The WINMEM32 Library
Thomas Sherlock 57
Learning Windows Part V: Exploring the
Graphics Device Interface
Marc Adler 75
Creating a Client-Server Application with LAN
Manager 2.0 and Named Pipes
Brendan W. Dixon 93
Windows Q & A
Fran Finnegan 111

January 1991: Vol. 6 No. 1


Adapting Extended Processes to the Cooperative
Multitasking of Microsoft Windows
William S. Hall 21
Creating a Network Service Using the ClientServer Model and LAN Manager
Brendan W. Dixon 45
Improve Windows Application Memory Use with
Subsegment Allocation and Custom Resources
Paul Yao 75
Learning Windows Part IV: Integrating Controls
and Dialog Boxes
Marc Adler 97
Windows Q & A
Fran Finnegan 119

November 1990: Vol. 5 No. 6


Port Windows Applications to OS/2 (Almost)
Painlessly with the Software Migration Kit
Eric Fogelin, David Wood, and Noel Bergman 21
Windows 3.0 Memory Management: Supporting
Disparate 80x86 Architectures
Paul Yao 35
Measure Your Machine's Activity and Learn How to
Use OS/2 Threads with CPUMETER
Bob Chiverton 49
Learning Windows Part III: Control Windows
and MDI Support
Marc Adler 67
Extending Off-the-Shelf Windows Applications
with Macros and DLLs
Bill Eisner 89
Creating a Data-Entry and Reporting Library for
Windows 3.0: Part II
Kevin P. Welch 99
Windows Q & A
Fran Finnegan 122

September 1990: Vol. 5 No. 5


Creating a Multipage Data-Entry and Reporting
Library for Windows Version 3.
Kevin P. Welch 1
Spawn Programs from Within Your DOS
Application Using Almost No Additional Memory
Marc Adler 33
Based Pointers:Combining Far Pointer
Addressability and the Small Size of Near Pointers
Richard Hale Shaw 51
Checkers for PM Part IV: Adding the Game-Playing
Strategy
Charles Petzold 69
Learning Windows Part II: Resources and the
Menuing System
Marc Adler 75
ToolBook, an Interactive Development
Environment for Windows
Richard Hale Shaw 93
Adapting the Parallel Port for Bidirectional
Communication
Ross M. Greenberg 107
Windows Q & A
Fran Finnegan 122

July 1990: Vol. 5 No. 4

An Introduction to Microsoft Windows Version


3.0: A Developer's Viewpoint
Michael Geary 1
Extending the Windows 3.0 Interface with
Installable Custom Controls
Kevin P. Welch 29
A New Multiple Document Interface API Simplifies
MDI Application Development
Charles Petzold 53
Providing DDE Facilities to OS/2 Kernel
Applications
Richard Hale Shaw 65
Learning Windows Part I: The Message-based
Paradigm
Marc Adler 85
Supporting Protected-Mode Applications in a DOSbased Environment
Ray Duncan 92

May 1990: Vol. 5 No. 3


OS/2 Version 2.0: Exploiting the 32-bit
Architecture of 80386 and 80486-based Systems
Ray Duncan 1
Adding Hypertext-based Help to Your Application
Using the Microsoft Help System
Marc Adler 15
An In-depth Exploration of the PC Keyboard and
Its Interrupt Service Routines
Michael J. Mefford 22
Creating Windows List Boxes that Support
Virtualized Scrolling
Robert A. Wood 47
Using Object-Oriented Methodologies in Windows
Applications
Kevin P. Welch 63
Fundamental Recommendations on C
Programming Style
Greg Comeau 67
Examining Object-Oriented Techniques Using
Quick Pascal
Kris Jamsa 71
Implementing DDE with Presentation Manager
Object Windows
Richard Hale Shaw 81

March 1990: Vol. 5 No. 2


Using the OS/2 National Language Support
Services to Write International Programs
Asmus Freytag and Michael Leu 1
Building an Extensible Clipboard Viewer Through

the Use of Dynamic-Link Libraries


Kevin P. Welch 27
Microsoft C Version 6.0 Provides an Integrated
Development Environment
Noel J. Bergman 53
TRACER: A Debugging Tool for OS/2 Presentation
Manager Development
Daniel Hilderbrand 63
Checkers for Presentation Manager Part III:
Moving the Pieces
Charles Petzold 75

January 1990: Vol. 5 No. 1


Accessing Presentation Manager Facilities from
Within OS/2 Kernel Applications
Richard Hale Shaw 1
Simplifying Complex Windows Development
Through the Use of a Client-Server Architecture
Scott Kerber 21
Enhancing the Presentation Manager User
Interface with Formatted Edit Fields
Marc Adler 35
Techniques for Tuning and Optimization of PM and
Windows Applications
Kevin P. Welch 47
A Survey of Windows and Presentation Manager
Prototyping Tools
Marc Adler 57
Checkers Part II: Drawing the Checkerboard and
Pieces Usinf GPI
Charles Petzold 63
Interfacing OS/2 Compiled BASIC to Presentation
Manager
Arthur Hanson and Lars Opstad 77
DOS Commands Inside Your Code: Process Control
and Signal Handling
Kris Jamsa 85

November 1989: Vol. 4 No. 6


Examining NewWave, Hewlett-Packard's Graphical
Object-Oriented Environment
Alan Cobb and Jonathan Weiner 1
Emulating the UNIX RS-232 General Serial I/O
Interface Under DOS
Michael J. Chase 19
Simplifying Pointer Syntax for Clearer, More
Accurate Programming
Greg Comeau 35
Integrating Subsystems and Interprocess
Communication in an OS/2 Application

Richard Hale Shaw 47


Exploring Dynamic-Link Libraries with a Simple
Screen Capture Utility
Kevin P. Welch 61
Checkers Part 1: Design Goals for Building a
Complete Graphical Application
Charles Petzold 69

September 1989: Vol. 4 No. 5


Design Goals and Implementation of the New High
Performance File System
Ray Duncan 1
Getting the Most from Expanded Memory with an
EMS Function Library
Douglas Boling 15
A Complete Guide to OS/2 Interprocess
Communications and Device Monitors
Richard Hale Shaw 35
Find Files Under Presentation Manager and
Windows with a Handy Utility
Kevin P. Welch 61
Writing Faster Graphics Programs by Using
Offscreen Bitmap Manipulation
Kevin Rudell 69

July 1989: Vol. 4 No. 4


Circumventing DOS Program Memory Constraints
with an Overlay Manager
Dan Mick 1
Extended Memory Specifications 2.x: Taking
Advantage of the 80286 Protected Mode
Chip Anderson 17
Exploring the Key Functions of the OS/2 Keyboard
and Mouse Subsystems
Richard Hale Shaw 27
Everything You Always Wanted to Know About the
MS-DOS EXEC Function
Ray Duncan 39
Customizing a Microsoft Windows Dialog Box
with New Control Classes
Gregg L. Spaulding 51
Techniques for Calling OS/2 System Services from
BASIC Programs
Ethan Winer 61
Pointers 101: Understanding and Using Pointers in
the C Language
Greg Comeau 73

May 1989: Vol. 4 No. 3


A Technical Study of Dynamic Data Exchange

Under Presentation Manager


Susan Franklin and Tony Peters 1
Creating a Virtual Memory Manager to Handle
More Data in Your Applications
Marc Adler 17
Using the OS/2 Video I/O Subsystem to Create
Appealing Visual Interfaces
Richard Hale Shaw 25
Investigating the Debugging Registers of the Intel
386 Microprocessor
Marion Hansen and Nick Stuecklen 39
Strategies for Building and Using OS/2 Run-Time
Dynamic-Link Libraries
Ross M. Greenberg 51
How the 8259A Programmable Interrupt
Controller Manages External I/O Devices
Jim Kyle and Chip Rabinowitz 59
Advanced Techniques for Using Structures and
Unions in Your C Code
Greg Comeau 69

March 1989: Vol. 4 No. 2


Exploring Vector Fonts with the OS/2 Graphics
Programming Interface
Charles Petzold 1
BASIC as a Professional Programming Language:
An Interview with Ethan Winer
MSJ Interview 15
Organizing Data in Your C Program with
Structures, Unions, and Typedefs
Greg Comeau 23
Whitewater's Actor: An Introduction to ObjectOriented Programming Concepts
Zack Urlocker 33
MDI: An Emerging Standard for Manipulating
Document Windows
Kevin P. Welch 45
Planning and Writing a Multithreaded OS/2
Program with Microsoft C
Richard Hale Shaw 63

January 1989: Vol. 4 No. 1


Quotron Uses Windows to Develop New Market
Analysis Tools for Real-Time Data
Tony Rizzo and Karen Strauss 1
Porting Apple Macintosh Applications to the
Microsoft Windows Environment
Andrew Schulman and Ray Valdes 11
Developing Applications with Common Source
Code for Multiple Environments

Michael Geary 41
Using the OS/2 Environment to Develop DOS and
OS/2 Applications
Richard Hale Shaw 77

November 1988: Vol. 3 No. 6


Building a Device-Independent Video Display I/O
Library in Microsoft C
Jeff Prosise 1
Developing SQL Server Database Applications
Through DB-Library
Marc Adler 13
OS/2 Protected-Mode Programming with Forth,
LISP, Modula-2, and BASIC
Andrew Schulman 25
The High Memory Area: Addressing 64Kb More
Memory in Real Mode
Chip Anderson 53
Developing and Debugging Embedded Systems
Applications
Y.P. Chien, Ph.D 58
C Scope and Linkage: The Keys to Understanding
Indetifier Accessibility
Greg Comeau 65
Extending the Functions of the Windows Clipboard
with Scrapbook+
Kevin P. Welch 73

September 1988: Vol. 3 No. 5


Bridge/386: A Tool for Integrating Applications
Under Windows/3
Matt Trask 1
A Guide to Understanding Even the Most Complex
C Declarations
Greg Comeau 10
Techniques for Debugging Multithread OS/2
Programs with CodeView 2.
Charles Petzold 21
Exchanging Data Between Applications Using the
Windows Clipboard
Kevin P. Welch 31
Using Microsoft C Version 5.1 to Write
Terminate-and-Stay-Resident Programs
Kaare Christian 47
Customizing the Features of the M Editor Using
Macros and C Extensions
Leo N. Notenboom 59
Dynamically Creating Dialog Boxes Using New
Windows 2.x Functions
Don Hasson 73

July 1988: Vol. 3 No. 4


DARWIN: Merrill Lynch Develops a New
Workstation Based on Windows 2.
Tony Rizzo and Karen Strauss 1
Code View for Windows Provides an Interactive
Debugging Environment
Paul Yao and David Durant 13
OS/2 Graphics Programming Interface: An
Introduction to Coordinate Spaces
Charles Petzold 23
Microsoft Macro Assembler Version 5.1
Simplifies Macros and Interfacing
Ross M. Greenberg 41
Color Mixing Principles and How Color Works in
the Raster Video Model
Kevin P. Welch 49
Creating User-Defined Controls for Your Own
Windows Applications
Kevin P. Welch 54
SQL Server Bringd Distributed DBMS Technology
for OS/2 Via LAN Manager
Marc Adler 67

May 1988: Vol. 3 No. 3


SQL Windows Brings a Graphical User Interface to
SQL Database Applications
Craig Stinson 1
The Graphics Programming Interface: A Guide to
OS/2 Presentation Spaces
Charles Petzold 9
Using OS/2 Semaphores to Coordinate Concurrent
Threads of Execution
Kevin Rudell 19
Design Concepts and Considerations in Building
and OS/2 Dynamic-Link Library
Ross M. Greenberg 27
New Compiler Technology Boosts Microsof
QuickBASIC 4.0 Productivity
Augie Hansen 49
Debug Microsoft Windows Programs More
Effectively with a Simple Utility
Kevin P. Welch 64
An Examination of the Operating Principles of the
Microsoft Object Linker
Richard Wilton 73

March 1988: Vol. 3 No. 2


Microsoft Windows Adapts to the Unique Needs

of the Japanese Market


Tom Sato and Lin F. Shaw 1
Utilizing OS/2 Multithread Techniques in
Presentation Manager Applications
Charles Petzold 11
OS/2 LAN Manager Provides a Platform for Serverbased Network Applications
Alan Kessler 29
Writing OS/2 Bimodal Device Drivers: An
Examination of the DevHlp API
Ray Duncan 39
Exploring the Structure and Contents of the MSDOS Object Module Format
Richard Wilton 56
A Guide to Program Editors, the Developer's Most
Important Tool
Tony Rizzo 63

January 1988: Vol. 3 No. 1


Preparing for Presentation Manager: Paradox
Steps Up to Windows 2.
Craig Stinson 1
Converting Windows Applications for Microsoft
OS/2 Presentation Manager
Michael Geary 9
Programming Considerations in Porting to
Microsoft XENIX System V/3
Martin Dunsmuir 31
HEXCALC: An Instructive Pop-Up Calculator for
Microsoft Windows
Charles Petzold 39
Effectively Using Far and Huge Data Pointers in
Your Microsoft C Programs
Kaare Christian 49
EMS Support Improves Microsoft Windows 2.0
Application Performance
Paul Yao 57
LIM EMS 4.0: A Definition for the Next Generation
of Expanded Memory
Marion Hansen and John Driscoll 67

November 1987: Vol. 2 No. 5


Microsoft Excel for Windows: Meeting the
Demands of a New Generation
Jared Taylor 1
Interprogram Communication Using Windows'
Dynamic Data Exchange
Kevin P. Welch 13
Designing for Windows: An Interview with the
Microsoft Excel Developers

MSJ Interview 39
A Strategy for Building and Debugging Your First
MS-DOS Device Driver
Ross M. Greenberg 51
Microsoft C Optimizing Complier 5.0 Offers
Improved Speed and Code Size
Augie Hansen 67

September 1987: Vol. 2 No. 4


Microsoft Windows/386: Creating a Virtual
Machine Environment
Ray Duncan 1
Programming in C the Fast and Easy Way with
Microsoft QuickC
Augie Hansen 15
Character-Oriented Display Services Using OS/2's
VIO Subsystem
Ray Duncan 23
Dynamic Allocation Techniques for Memory
Management in C Programs
Steve Schustack 35
CD ROM Technology Opens the Doors on a New
Software Market
Tony Rizzo 47
MS-DOS CD ROM Extensions: A Standard PC
Access Method
Tony Rizzo 54
Microsoft QuickBASIC: Everyone's First PC
Language Gets Better
Dan Mick 63

July 1987: Vol. 2 No. 3


PLEXUS Introduces Windows-based Tools for
Building Image Databases
Kevin Strehlo 1
Porting MS-DOS Assembly Language Programs
to the OS/2 Environment
Ray Duncan 9
Microsoft Windows 2.0: Enhancements Offer
Developers More Control
Michael Geary 19
Keeping Up With the Real World: Speedy Serial
I/O Processing
Ross M. Greenberg 37
BLOWUP: A Windows Utility for Viewing and
Manipulating Bitmaps
Charles Petzold 51
Increase the Performance of Your Programs with
a Math Coprocessor
Marion Hansen and Lori Sargent 59

TIFF: An Emerging Standard for Exchanging


Digital Graphic Imagines
Nancy Andrews and Stan Fry 71

May 1987: Vol. 2 No. 2


Microsoft Operating System/2: A Foundation for
the Next Generation
Tony Rizzo 1
OS/2 Windows Presentation Manager: Microsoft
Windows on the Future
Manny Vellon 13
OS/2 DOS Environment: Compatibility and
Transition for MS-DOS Programs
Joel Gillman 19
OS/2 Multitasking: Exploiting the Protected Mode
of the 2
Ray Duncan 27
OS/2 Inter-Process Communication: Semaphores,
Pipes, and Queues
Ray Duncan 37
A Complete Guide to Writing Your First OS/2
Program
Charles Petzold 51
Turn Off the Car to Change Gears: An Interview
with Gordon Letwin
Lori Valigra 61
A Simple Windows Application for Custom Color
Mixing
Charles Petzold 67

March 1987: Vol. 2 No. 1


IRMA: A 3278 Terminal Emulator for Micro-toMainframe Communication
Frank Derfler and Edward Halbert 1
Upgrading Applications for Multi-user
Environments
Robert Cowart 11
Expanded Memory: Writing Programs That Break
the 640K Barrier
Marion Hansen, Bill Krueger and Nick Stuecklen 21
Keep Track of Your Windows Memory with
FREEMEM
Charles Petzold 33
A Guide to Debugging With Code View
David Norris and Michael J. O'Leary 41
Page Description Languages: High-Level
Languages for Printer Independence
Steve Rosenthal 49
Dial 2.0 Provides Software Developers with
Integrated Support System

Barbara Kransnoff 59
Rich Text Format Standard Makes Transferring
Text Easier
Nancy Andrews 63

December 1986: Vol. 1 No. 2


Aldus: Preparing PageMaker for the Move to
Windows
Kevin Strehlo 1
Moving Toward an Industry Standard for
Developing TSRs
Nancy Andrews 7
A Step-by-Step Guide to Building Your First
Windows Application
Charles Petzold 13
New XENIX Version Will Be First to Run On the
Intel 803
Joe Desposito 25
A New Generation of Debugging Arrives with Code
View
Charles Petzold 29

October 1986: Vol. 1 No. 1


Advanced Reuter Terminal Gives Traders Window
on Financial World
MSJ Interview 1
DDE: A Public Protocol for Advanced Application
Linkages
Harvey Berger 7
New Intel Graphics Coprocessor Makes Windows
Sparkle
Joe Desposito 17
TI's Programmable Graphics Processor Perks up
PC Pixels
Joe Desposito 21
Latest Dialog Editor Speeds Windows Application
Development
Charles Petzold 25
1998 Microsoft Corporation. All rights reserved. Legal Notices.

You might also like