AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

switch, break, case c++

Ein Thema von EWeiss · begonnen am 27. Aug 2017 · letzter Beitrag vom 28. Aug 2017
Antwort Antwort
Seite 1 von 6  1 23     Letzte »    
EWeiss
(Gast)

n/a Beiträge
 
#1

switch, break, case c++

  Alt 27. Aug 2017, 09:41
Interesse halber hätte ich gern gewusst wie break in Switchs richtig angewendet werden.

Der break nach FullScreen soll falsch sein nur warum ?
Ist genauso wie bei der case Anweisung darüber.

Bei meiner Frage geht es ausschließlich um die Anordnung Zuweisung von switch, break, case der Code ist nebensächlich.

Code:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    WPARAM wpItem;
    LRESULT IntI = 0;

    switch (message)
    {
    case WM_GETMINMAXINFO:
    {
        MINMAXINFO* pInfo = (MINMAXINFO*)lParam;
        pInfo->ptMinTrackSize.x = XMIN_SIZE;
        pInfo->ptMinTrackSize.y = YMIN_SIZE;
    }
    break;

    case WM_COMMAND:
    {
        if (HIWORD(wParam) == CBN_SELCHANGE)
        {
            switch LOWORD(wParam)
            {
            case ID_CBVRENDERER:
            {
                WCHAR * Buffer[5];

                IntI = SendMessage(HW(ID_CBVRENDERER), CB_GETCURSEL, IntI, 0);
                if (IntI != CB_ERR)
                    SendMessage(HW(ID_CBVRENDERER), CB_GETLBTEXT, IntI, (WPARAM)(&Buffer));

                KVideo_SetVideoRenderer((TVRenderer)IntI);

                if (KVideo_GetPlayerState() != psNotReady)
                    Confirm(L"Designated video renderer will be applied since next opening media file.");
            }
            break;

            case ID_CBPLAYBACKRATE:
            {
                WCHAR * Buffer[5];

                IntI = SendMessage(HW(ID_CBPLAYBACKRATE), CB_GETCURSEL, IntI, 0);
                if (IntI != CB_ERR)
                    SendMessage(HW(ID_CBPLAYBACKRATE), CB_GETLBTEXT, IntI, (WPARAM)(&Buffer));

                WCHAR * fIn = (WCHAR*)(&Buffer);
                float fOut = (float)wcstod(fIn, NULL);

                KVideo_SetPlaybackRate(fOut);
            }
            break;
            }
        }

        wpItem = LOWORD(wParam);
        switch (wpItem)
        {
        case ID_OPEN:
        {
            if (KVideo_GetPlayerState() != psNotReady)
            {
                KillTimer(gP.MovieHandle, MOVIE_TIMER);
                KVideo_CloseFile();
                // Einstellungen zurück setzen
                gP.MenuAudioChecked = 0;
                gP.MenuVideoChecked = 0;
                SetWindowText(HW(LB_STREAMDURATION), L"00:00:00\\");
                SetWindowText(HW(LB_STREAMELAPSED), L"00:00:00");
                SetWindowText(HW(LB_VIDEOINFO), L"0 x 0, 0 FPS");
                SetWindowText(HW(LB_FILENAME), L"_");
                SetWindowText(HW(LB_AUDIOPROPERTY), L"0 Channel, 0 SPS, 0 BPS");
                SetScrollPos(gP.MovieHandle, SBS_HORZ, 0, TRUE);
                InvalidateRect(hWnd, NULL, FALSE);
                UpdateWindow(hWnd);
            }

            // OpenFileDialog Initialisieren          
            CoInitialize(NULL);

            const WCHAR *lpstrFilter = L"Media Files\0*.aac;*.asf;*.avi;*.m4a;*.mp3;*.mp4;*.m4v;*.wav;*.wma;*.wmv;*.3gp;*.3g2;*.mpeg;*.mpg;*.mov;*.qt;*.mkv;*.flv;*.vob\0"
                L"All files\0*.*\0";

            HANDLE hf;
            OPENFILENAME OpenMediaFile;
            ClearMemory(&OpenMediaFile, sizeof(OpenMediaFile));

            WCHAR szFile[MAX_PATH];
            szFile[0] = L'\0';

            OpenMediaFile.lStructSize = sizeof(OpenMediaFile);
            OpenMediaFile.hwndOwner = NULL;
            OpenMediaFile.lpstrFile = szFile;
            OpenMediaFile.nMaxFile = sizeof(szFile);
            OpenMediaFile.lpstrFilter = lpstrFilter;
            OpenMediaFile.nFilterIndex = 1;
            OpenMediaFile.lpstrFileTitle = NULL;
            OpenMediaFile.nMaxFileTitle = 0;
            OpenMediaFile.lpstrInitialDir = NULL;
            OpenMediaFile.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

            // Video starten
            if (GetOpenFileName(&OpenMediaFile))
            {
                hf = CreateFile(OpenMediaFile.lpstrFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

                if (hf > 0)
                {
                    CloseHandle(hf);
                    LRESULT IntI = SendMessage(HW(ID_CBVRENDERER), CB_GETCURSEL, 0, 0);
                    KVideo_SetVideoRenderer((TVRenderer)IntI);

                    // Mediafile starten
                    RunMediaFile(szFile, FALSE);
                }
            }
            CoUninitialize();
        }
        break;
        case ID_PLAY:
        {
            if (KVideo_GetPlayerState() == psPlaying)
                return 0;
            if (KVideo_GetPlayerState() == psPaused || KVideo_GetPlayerState() == psStopped)
                if (KVideo_Play())
                    SetTimer(gP.MovieHandle, MOVIE_TIMER, 200, NULL);
        }
        break;
        case ID_PAUSE:
        {
            if (KVideo_GetPlayerState() == psPlaying)
                if (KVideo_Pause())
                    KillTimer(gP.MovieHandle, MOVIE_TIMER);
        }
        break;
        case ID_STOP:
        {
            if (KVideo_GetPlayerState() == psPlaying || KVideo_GetPlayerState() == psPaused)
                if (KVideo_Stop())
                    KillTimer(gP.MovieHandle, MOVIE_TIMER);

            SetWindowText(HW(LB_STREAMDURATION), L"00:00:00\\");
            SetWindowText(HW(LB_STREAMELAPSED), L"00:00:00");
            SetScrollPos(gP.MovieHandle, SBS_HORZ, 0, TRUE);
            InvalidateRect(hWnd, NULL, FALSE);
            UpdateWindow(hWnd);
        }
        break;
        case ID_FULLSCREEN:
        {
            gP.bFullScreen = !gP.bFullScreen;
            SetForegroundWindow(hWnd);
            if (gP.bFullScreen)
            {
                RECT rect;
                rect.right = GetSystemMetrics(SM_CXSCREEN);
                rect.bottom = GetSystemMetrics(SM_CYSCREEN);
                SetWindowLongPtr(hWnd, GWL_STYLE, WS_POPUP | WS_VISIBLE);
                AdjustWindowRect(&rect, WS_POPUP, FALSE);
                MoveWindow(hWnd, 0, 0, rect.right, rect.bottom, FALSE);
            }
            else
            {
                RECT rect;
                rect.right = dpi(XMIN_SIZE);
                rect.bottom = dpi(YMIN_SIZE);
                rect.left = (GetSystemMetrics(SM_CXSCREEN) - rect.right) / 2;
                rect.top = (GetSystemMetrics(SM_CYSCREEN) - rect.bottom) / 2;
                SetWindowLongPtr(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE);
                AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE);
                MoveWindow(hWnd, rect.left, rect.top, dpi(XMIN_SIZE), dpi(YMIN_SIZE), FALSE);
            }
        }
        break;
        case ID_CAPTURE:
        {
            TPlayerState ps = KVideo_GetPlayerState();
            if (ps == psStopped || ps == psNotReady)
            {
                Confirm(L"It's not playing state.");
                return 0;
            }
            else
            {
                HBITMAP hbmp = 0;
                if (KVideo_GetCapturedImage(&hbmp))
                {
                    WCHAR Image[MAX_PATH];
                    ZeroMemory(Image, MAX_PATH * sizeof(WCHAR));

                    WCHAR * Path = { 0 };
                    Path = EXEpath();

                    _snwprintf_s(Image, MAX_PATH, 259, L"%s%d%s", Path, gP.PicCount, L"_Capture.jpg");

                    SaveBitmapToFile(Image, hbmp, 0);
                    gP.PicCount++;
                }
                DeleteObject(hbmp);
            }
        }
        break;
        case ID_CLOSE:
            DestroyWindow(hWnd);
            break;
            // Menüauswahl bearbeiten:
        case ID_CKB_SEARCH:
        {
            if (KVideo_GetPlayerState() != psNotReady)
            {
                BOOL checked = IsDlgButtonChecked(hWnd, ID_CKB_SEARCH);
                if (checked) {
                    CheckDlgButton(hWnd, ID_CKB_SEARCH, BST_UNCHECKED);
                }
                else
                {
                    CheckDlgButton(hWnd, ID_CKB_SEARCH, BST_CHECKED);
                }
                KVideo_SetSearchMode(EnableWindow(HW(ID_CBPLAYBACKRATE), !checked));
                break;
            }
        }
        break;
        case IDM_ABOUT:
            DialogBox(GetModuleHandle(0), MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
    }
    break;
    case WM_HSCROLL:
    {
        switch LOWORD(wParam)
        {
        case TB_ENDTRACK:
            gP.bVolume = FALSE;
            break;
        case TB_THUMBTRACK: // ziehen des "Sliders"
        case TB_TOP:        // Pos1
        case TB_BOTTOM:     // Ende
        case TB_LINEDOWN:   // Pfeiltasten oben/unten
        case TB_PAGEDOWN:   // Bild runter & in die Leiste geklickt
        case TB_PAGEUP:     // Bild auf & in die Leiste geklickt
        {
            gP.bVolume = TRUE;
            gP.Position = (int)SendMessage(HW(ID_TBVOLUME), TBM_GETPOS, 0, 0);
            if (gP.Position == 0)
                KVideo_SetVolume(-10000);
            else
                KVideo_SetVolume(LONG(5000 * log10(gP.Position)) - 10000);
        }
        break;
        }
    }
    break;
    case WM_SIZE:
    {
        EnumChildWindows(hWnd, &AnchorEnum, 0);
        RedrawWindow(hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_ERASENOW | RDW_UPDATENOW | RDW_ALLCHILDREN | RDW_FRAME);
    }
    break;
    case WM_CTLCOLORSTATIC:
    {
        HDC hdcStatic = (HDC)wParam;
        SetBkMode(hdcStatic, TRANSPARENT);
        return (INT_PTR)GetStockObject(WHITE_BRUSH);
    }
    break;
    case WM_PAINT:
    {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hWnd, &ps);
        EndPaint(hWnd, &ps);
    }
    break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
Auch mit den Klammern komme ich nicht klar.
Ab wann bzw.. wie vielen Zeilen nach case wird die Klammer benötigt?


gruss

Geändert von EWeiss (27. Aug 2017 um 09:49 Uhr)
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#2

AW: switch, break, case c++

  Alt 27. Aug 2017, 09:49
Soweit ich C kenne, wird jeder Case Zweig durchlaufen, außer du machst am Ende jedes Zweiges das break. Das ist ja der große Unterschied zu Delphi.
Das break muss dann natürlich innerhalb der Klammer sein.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#3

AW: switch, break, case c++

  Alt 27. Aug 2017, 09:52
Und soweit ich es noch weiß, werden Klammern für einen Switch-Case gar nicht benötigt, im Gegensatz zu Delphi.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: switch, break, case c++

  Alt 27. Aug 2017, 09:54
Soweit ich C kenne, wird jeder Case Zweig durchlaufen, außer du machst am Ende jedes Zweiges das break. Das ist ja der große Unterschied zu Delphi.
Das break muss dann natürlich innerhalb der Klammer sein.
Ich muss das mal Code mäßig sehen.

Manche machen es so.
Code:
case x:
{
  // Anweisung
}
break;
andere machen es so
Code:
case x:
{
  // Anweisung
  break;
}
dann wieder so.
Code:
case x:
  // Anweisung
  break;
da blickt keiner mehr durch.

gruss
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#5

AW: switch, break, case c++

  Alt 27. Aug 2017, 09:56

andere machen es so
Code:
case x:
{
  // Anweisung
  break;
}
Ich meine, dass es so sein sollte.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: switch, break, case c++

  Alt 27. Aug 2017, 10:00

andere machen es so
Code:
case x:
{
  // Anweisung
  break;
}
Ich meine, dass es so sein sollte.
Mein Problem ist... Annahmen nutzen mir nichts denn es würde auch so gehen.
Code:
case x:
   // Anweisung
   break;
Warum einmal so dann wieder so.

Gibt es da keine ganz klare Definition an der man sich halten kann (muss) ?
Letztendlich wird man für blöd gehalten wenn man nicht mal in der Lage ist ein break; korrekt zu setzen.

gruss

Geändert von EWeiss (27. Aug 2017 um 10:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#7

AW: switch, break, case c++

  Alt 27. Aug 2017, 10:01
Ohne Gewähr:
Code:
switch (Irgendwas){
  case Dings:
    MachWas();
    break;
  case Bums:
    MachWasAnderes();
    break;
  case Wuppdi:
    if (Bedingung){
      TollerCode();
    }
    break;
  default:
    WasWoandersNichtPasst();
}
BTW: https://msdn.microsoft.com/de-de/library/k0t5wee3.aspx
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: switch, break, case c++

  Alt 27. Aug 2017, 10:05
Genau hier.

Code:
   case 'a' :
       { 
       // Declaration of szChEntered OK. Local scope.
       char szChEntered[] = "Character entered was: ";
       cout << szChEntered << "a\n";
       } 
       break;
 
   case 'b' :
       // Value of szChEntered undefined.
       cout << szChEntered << "b\n";
       break;
 
   default:
       // Value of szChEntered undefined.
       cout << szChEntered << "neither a nor b\n";
       break;
   }
einmal klammer nach Case einmal keine..
welcher sinn steckt dahinter.

Code:
  case Dings:
     MachWas();
     break;
  case Dings:
     MachWas();
     {
         MachWasViel?();
         Vielezeilen
         break; << break hier
     }
     break; << oder break hier
gruss

Geändert von EWeiss (27. Aug 2017 um 10:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: switch, break, case c++

  Alt 27. Aug 2017, 10:08
Ganz ehrlich: ich hab keine Ahnung, dafür reicht mein bescheidenes C/C++ nicht aus.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: switch, break, case c++

  Alt 27. Aug 2017, 10:11
Ganz ehrlich: ich hab keine Ahnung, dafür reicht mein bescheidenes C/C++ nicht aus.
Deshalb stelle ich ja die Frage hier
Man steht da wie ein blöder weil niemand einem sagen kann wie es nun korrekt ist.

Wie gesagt Annahmen ohne konkreten beleg nutzen mir nichts.

gruss
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 6  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz