DialogBox в Win32 - предотвращение нескольких экземпляров - PullRequest
0 голосов
/ 14 мая 2010

У меня есть программа, которая создает окно DialogBox, когда пользователь щелкает элемент меню в трее,

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

Но проблема здесь в том, что каждый раз, когда пользователь щелкает элемент в трее, появляется новый экземпляр диалогового окна. Есть ли способ предотвратить этот множественный экземпляр?

Кстати, мой SetupDlgProc выглядит так,

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

Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 14 мая 2010

Распространенная проблема. Используйте флаг:

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;
/* ... */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...