tags:

views:

33

answers:

1

Hello all,

I have a program which creates DialogBox window when user clicks the menu item from tray icon,

 case ID_OPTIONS:
        DialogBox ( GetModuleHandle ( NULL ), 
                    MAKEINTRESOURCE ( IDD_SETUP_DIALOG ), 
                    hWnd, 
                    reinterpret_cast<DLGPROC>(SetupDlgProc) );
        return 0;

But the problem here is everytime when users clicks item from tray , a new instance of the dialogbox appears. Is there anyway to prevent this multiple instance ?

BTW, my SetupDlgProc looks like this,

BOOL CALLBACK SetupDlgProc ( HWND hwnd, UINT Message, WPARAM wParam, 
                                                            LPARAM lParam )
{
    switch ( Message )
    {
    case WM_INITDIALOG:
     ...
    }
}

Thanks for your help.

+2  A: 

A common problem. Use a flag:

static bool bDialogShowing = false;
switch (Message)
{
case ID_OPTIONS:

    if (bDialogShowing) 
        return true;
    bDialogShowing = true;

    DialogBox ( GetModuleHandle ( NULL ), 
                MAKEINTRESOURCE ( IDD_SETUP_DIALOG ), 
                hWnd, 
                reinterpret_cast<DLGPROC>(SetupDlgProc) );

    bDialogShowing = false;

    return 0;
/* ... */
}
egrunin
OK. I should stick with this.
TuxGeek