Label wird zu spät angezeigt - Zeitverhalten von Messages



  • Hi,

    ich habe ein Problem was das Anzeigen eines static textes angeht und denke es liegt am Zeitverhalten der Messages.

    Ich habe ein Dialog der bei einem bestimmtenm Button einen weiteren Dialog öffnet.
    Das öffnen des zweiten Dialoges dauert allerdings ein Stück da gewisse Operationen vorm Anzeigen durchgeführt werden.
    Meine Idee war also ein static text anzuzeigen bevor ich den anderen Dialog aufrufe.

    Leider wird das Label erst angezeigt, nachdem der neue Dialog offen ist.

    Das sieht alles inetwas so aus

    BOOL APIENTRY DeviceSelectProc(HWND hDlg, UINT msg, UINT wp, LONG lp)
    {
         switch (msg)
         {
            case WM_COMMAND:
            {
                switch (LOWORD(wp))
                {
                    case IDC_BUTTON_SELECTDEVICE:
                    {
                        ShowBackupRestoreDlg(hDlg);
                        return TRUE;
                    }
                }
             }
         }
    }
    
    void ShowBackupRestoreDlg(HWND hDialog)
    {
        if ( _tcscmp(g_szSelectedDevice,g_szNoSelection) != 0 )
        {
            ShowScanLabel(hDialog,true);  //Label wird in dem Anderen Dialog zurück gesetzt
            if (false == IsWriteProtected())
            {
                DialogBox(g_hInst,MAKEINTRESOURCE(TAB_DLG),hDialog,(DLGPROC )TabDlgProc);
            }
        }
    }
    
    void ShowScanLabel(HWND hDialog,bool bState)
    {
        HWND hScanLabel = GetDlgItem(hDialog,IDC_SCANNING);
    
        if ( false == bState)
        {
            ShowWindow(hScanLabel,SW_HIDE);
        }
        else
        {
            ShowWindow(hScanLabel,SW_SHOWNORMAL);
        }
    }
    

    Wie gesagt, das scan label wird angezeigt aber erst wenn der andere Dialog bereits offen ist.

    Kann mir da jemand helfen?

    Gruß
    Sascha



  • Hallo _Sascha_,
    versuch es doch mal so! 🤡

    void ShowScanLabel(HWND hDialog,bool bState)
    {
        HWND hScanLabel = GetDlgItem(hDialog,IDC_SCANNING);
    
        if ( false == bState)
        {
            ShowWindow(hScanLabel,SW_HIDE);
        }
        else
        {
            ShowWindow(hScanLabel,SW_SHOWNORMAL);
        }
    
     //=== Fenster Updaten ============================
        InvalidateRect(hDialog,NULL,true);
        UpdateWindow(hDialog);
     //================================================
    
    }
    

    Gruß
    Sascha


  • Mod

    Geht einfacher mit RedrawWindow!


Anmelden zum Antworten