INF: Using One IsDialogMessage Call for Many Modeless Dialogs

ID Number: Q71450

3.00

WINDOWS

Summary:

In the Windows environment, an application can implement more than one

modeless dialog box with a single call to the IsDialogMessage

function. This can be done by using the following three-step method:

1. Maintain the window handle to the currently active modeless dialog

box in a global variable.

2. Pass the global variable as the hDlg parameter to the

IsDialogMessage function, which is normally called from the

application's main message loop.

3. Update the global variable whenever a modeless dialog box's window

procedure receives a WM_ACTIVATE message, as follows:

- If the dialog is losing activation (wParam is 0), set the global

variable to NULL.

- If the dialog is becoming active (wParam is 1 or 2), set the

global variable to the dialog's window handle.

More Information:

The information below demonstrates how to implement this technique.

1. Declare a global variable for the modeless dialog box's window

handle.

HWND hDlgCurrent = NULL;

2. In the application's main message loop, add a call to the

IsDialogMessage function.

while (GetMessage(&msg, NULL, 0, 0))

{

if (NULL == hDlgCurrent || !IsDialogMessage(hDlgCurrent, &msg))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

3. In the modeless dialog box's window procedure, process the

WM_ACTIVATE message.

switch (message)

{

case WM_ACTIVATE:

if (0 == wParam) // becoming inactive

hDlgCurrent = NULL;

else // becoming active

hDlgCurrent = hDlg;

return FALSE;

}

For more information on the WM_ACTIVATE message, see page 6-47 in the

"Microsoft Windows Software Development Kit (SDK) Reference Volume 1."

For details on the IsDialogMessage function, see page 4-266 in the SDK

reference, Volume 1.

For details on using a modeless dialog box in an application for the

Windows environment, see Chapter 10 of "Programming Windows," second

edition, (Microsoft Press) written by Charles Petzold.

Additional reference words: 3.00 MICS3 R1.7 focus