2010-05-14 38 views
0

我有一個程序,當用戶單擊托盤圖標的菜單項創建對話框窗口,對話框在Win32中 - 防止多個實例

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

感謝您的幫助。

回答

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

好的。我應該堅持這一點。 – ukanth 2010-05-14 05:02:04