FIX: CheckAutoCenter May Return TRUE with DS_ABSALIGN

ID: Q132116


The information in this article applies to:
  • The Microsoft Foundation Classes (MFC), included with:
    • Microsoft Visual C++ 32-bit Edition, versions 2.0, 2.1


SYMPTOMS

Positioning a dialog box, using DS_ABSALIGN and the Y axis screen coordinate of zero causes the dialog box to be centered within the application's main window.


CAUSE

The function Dialog::CheckAutoCenter() is called to determine whether the dialog should be centered. In the case of y == 0, CheckAutoCenter() will always return TRUE. This happens because of the following code from CheckAutoCenter() in WINCORE.CPP:


   BOOL bResult = !(lpTemplate->style & DS_ABSALIGN) &&
       lpTemplate->x == 0 || lpTemplate->y == 0; 
Note that because of the way C/C++ handles logical expressions, if lpTemplate->style == DS_ABSALIGN, then lpTemplate->x == 0 will not be evaluated. However, lpTemplate->y == 0 is evaluated and therefore is capable of returning TRUE to CheckAutoCenter().


RESOLUTION

Do not use a Y coordinate of zero with DS_ABSALIGN.


STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This problem has been fixed in Visual C++ 5.0 for Windows.


MORE INFORMATION

To reproduce this problem set the DS_ABSALIGN style and a y position of zero for the about box of a standard Appwizard-generated application.

Additional query words: center

Keywords : kbprg kbMFC KbUIDesign kbVC kbVC500fix
Version : winnt:
Platform : winnt
Issue type : kbbug


Last Reviewed: January 31, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.