Win32中的DialogBox - 防止多个实例

时间:2010-05-14 03:24:50

标签: c winapi dialog

当用户点击托盘图标

中的菜单项时,我有一个创建DialogBox窗口的程序
 case ID_OPTIONS:
        DialogBox ( GetModuleHandle ( NULL ), 
                    MAKEINTRESOURCE ( IDD_SETUP_DIALOG ), 
                    hWnd, 
                    reinterpret_cast<DLGPROC>(SetupDlgProc) );
        return 0;

但问题是,每当用户从托盘点击项目时,就会出现一个新的对话框实例。反正有没有阻止这个多个实例?

BTW,我的SetupDlgProc看起来像这样,

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

一个常见问题。使用标志:

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