【问题标题】:DialogBox in Win32 - Prevent multiple instanceWin32 中的对话框 - 防止多个实例
【发布时间】:2010-05-14 03:24:49
【问题描述】:

我有一个程序,当用户从托盘图标单击菜单项时,它会创建对话框窗口,

 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:
     ...
    }
}

感谢您的帮助。

【问题讨论】:

    标签: c winapi dialog


    【解决方案1】:

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

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

    【讨论】:

    • 好的。我应该坚持下去。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    相关资源
    最近更新 更多