Microsoft KB Archive/160522

{|
 * width="100%"|

PRB: CreateCompatibleBitmap Behaves Differently on NT and 95

 * }

Q160522

-

The information in this article applies to:


 * Microsoft Win32 Application Programming Interface (API), used with:
 * Microsoft Windows 95
 * Microsoft Windows NT Server versions 3.51, 4.0
 * Microsoft Windows NT Workstation versions 3.51, 4.0
 * Microsoft Windows 2000 Advanced Server
 * Microsoft Windows 2000 Server
 * Microsoft Windows 2000 Professional

-

SYMPTOMS
When calling CreateCompatibleBitmap on Windows NT, the operating system returns a bitmap where all of the pixels are initialized to BLACKNESS. On Windows 95, however, the operating system will not initialize the bits. This behavioral difference frequently shows up when software is developed on Windows NT and then later tested on Windows 95.

CAUSE
Windows NT initializes the contents of the bitmap for security reasons. Windows 95 does not provide the same level of security as Windows NT and, therefore, does not initialize the bits. You should always treat newly-created memory bitmaps as though they were uninitialized. You should initialize them yourself prior to drawing on them.

RESOLUTION
Fortunately, this behavioral difference is easy to work around. The simplest way is to PatBlt the surface of the memory bitmap with BLACKNESS after it is created. For example, to alter the function below so it produces the same behavior on both Windows 95 and Windows NT, add the following line of code immediately after the call to SelectObject:

  PatBlt(hdc, 0,0, rect.right, rect.bottom, BLACKNESS);

STATUS
This behavior is by design.