我有一个程序,当用户单击任务栏图标中的菜单项时会创建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:
     ...
    }
}


谢谢你的帮助。

最佳答案

常见问题。使用标志:

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;
/* ... */
}

08-27 01:33