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 4 von 6   « Erste     234 56      
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#31

AW: switch, break, case c++

  Alt 27. Aug 2017, 13:36
Achtung Syntaxfehler:

"WCHAR * Buffer[5];" soll/muss zu 99,9% "WCHAR Buffer[5]" heißen!

Du willst ja sicher 4Zeichen + abschließende "NULL" darin speichern(LB_GETTEXT)... dazu brauchst du ein eigentlich "ArrayOfWChar" und kein "ArrayOfWCharPointers"... das es funktioniert liegt daran, 5 Pointer zufällig mehr Speicher reservieren wie du für 5Zeichen brauchst und du dann irgendwie auch noch passend einen "cast" machst.

Denke mal drüber nach und versuche zu verstehen, warum es obwohl falsch doch in diesem Fall so funktioniert...
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#32

AW: switch, break, case c++

  Alt 27. Aug 2017, 13:51
Zitat:
Denke mal drüber nach und versuche zu verstehen, warum es obwohl falsch doch in diesem Fall so funktioniert...
Kann ich dir nicht sagen warum das trotzdem funktioniert.

aber da wir schon dabei sind.
Ist es überhaupt nötig ein Default: Case im switch (wpItem) bei WM_COMMAND zu verwenden?

sollte eigentlich am ende der WinProc reichen.

gruss
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#33

AW: switch, break, case c++

  Alt 27. Aug 2017, 14:05
ja das "default" im "wpItem" ist notwendig, weil das andere "default" von da aus nicht mehr erreicht werden kann.

Lass bei "*BUFF[5]" bitte trotzdem mal das Sternchen weg und ändere das auf "BUFF[5]".

Als allgemeiner guter Tip für C Anfänger bei über 95% der "normalen" Variablen Definition:
- (Char,...) Arrayvariablen, also TYPE x[size] werden fast immer ohne * definiert ! (also immer zuerst ohne versuchen und möglichst verstehen warum es (nicht) geht)
- mit Sternchen "TYPE* x[size]" oder als "PTYPE x[size]" was dann ein ArrayOfTypePointers entspricht arbeiten auch Pointerfanatiker in C/C++ nur wirklich selten und es kommt z.B. bei WINAPI kaum vor... (hier ist es im aktuellen Fall schwerer zu verstehen warum es obwohl falsch doch wegen genug Speicherreservierung doch geht)

Geändert von mensch72 (27. Aug 2017 um 16:02 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#34

AW: switch, break, case c++

  Alt 27. Aug 2017, 14:14
Zitat:
ja das "default" im "wpItem" ist notwendig, weil das andere "default" von da aus nicht mehr erreicht werden kann.
Lass bei "*BUFF[5]" bitte trotzdem mal das Sternchen weg und ändere das auf "BUFF[5]".
Danke für deine Hilfe
Habe es gemacht und kompiliert ohne Probleme.

gruss
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#35

AW: switch, break, case c++

  Alt 27. Aug 2017, 15:57
keine Ursache

im Gegensatz zu dir beschäftige mich mit grafischer oder hier solcher Detailarbeit eigentlich im Alltag garnicht mehr. Ich bin da selbst schon echt zu faul dafür geworden.
Obwohl für mein erstes großes C-Style WinApi 16Bit-Programm was damit jetzt sogar 64Bit fähig würde... da würde ich am liebsten mal wirklich die alten 16Bit WinApi(v3.11) Quelltexte von 1994..1998 hervorsuchen und das "1:1 mal fix" von 16Bit hoch auf 64Bit portieren... einzig bin ich nicht mehr bei der damaligen Firma und nur für NiceToHave ist mir meine Zeit eben dann wohl doch zu schade

Aber ev. kann auch von dir was noch lernen... wenn du magst schicke mir ne PM(du hast die PM-Empfangsfunktion selbst ja deaktivert)...
"Meinen Quelltext der DLL SK_AERO gibt es NUR auf persönlicher Anfrage. Das Teil ist nicht geheim, aber habe einiges an Zeit dafür investiert"

Egal ob Delphi,C,API,SDK oder was auch immer, ich lese gerne in fremden Quelltexten und meckere wenn dann nur sachlich begründet einzelne mir aufgefallene Details "nett" an

Geändert von mensch72 (27. Aug 2017 um 16:05 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#36

AW: switch, break, case c++

  Alt 27. Aug 2017, 16:10
Zitat:
"Meinen Quelltext der DLL SK_AERO gibt es NUR auf persönlicher Anfrage. Das Teil ist nicht geheim, aber habe einiges an Zeit dafür investiert"
JO den könnte ich dir schicken.
Aber dieser ist in Delphi geschrieben nicht in C++

Das C++ Project habe ich nur für die KVideoPlayer_x64.dll geschrieben.. weil diese MadVR und LAVFilter unterstützt.
Vielleicht braucht das ja mal jemand.

Habe dich zu meinen Kontakten addiert.
Schick mir ne Mail..

Habe jetzt noch den Vollbildmodus umgeschrieben.

Code:
       
case ID_FULLSCREEN:
    if (KVideo_GetPlayerState() != psNotReady)
        ToggleFullScreen();
    break;
Code:
void ToggleFullScreen()
{
    static DWORD screenWidth, screenHeight;
    static RECT rcSaved;
    long nTop = 0;
   

    gP.bFullScreen = !gP.bFullScreen;

    if (gP.bFullScreen)
    { 
        // Wechseln in den Vollbildmodus.
        GetWindowRect(gP.hMain, &rcSaved);

        rcSaved.right = GetSystemMetrics(SM_CXSCREEN);
        rcSaved.bottom = GetSystemMetrics(SM_CYSCREEN);
        SetWindowLongPtr(gP.hMain, GWL_STYLE, WS_POPUP);
        AdjustWindowRect(&rcSaved, WS_POPUP, FALSE);

        SetWindowPos(gP.hMain, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED | SWP_SHOWWINDOW);

        HMONITOR hMonitor = MonitorFromWindow(gP.hMain, MONITOR_DEFAULTTONEAREST);

        MONITORINFO tmi;
        ClearMemory(&tmi, sizeof(tmi));
        tmi.cbSize = sizeof(tmi);

        RECT rw;
        GetWindowRect(gP.hMain, &rw);
        GetMonitorInfo(hMonitor, &tmi);

        screenWidth = abs(Width(tmi.rcMonitor));
        screenHeight = abs(Height(tmi.rcMonitor));

        long ctrlpanelHeigh = 97;
        nTop = GetSystemMetrics(SM_CYMENU);
        rw.left = tmi.rcMonitor.left;
        rw.top = tmi.rcMonitor.top - nTop;
        rw.right = screenWidth;
        rw.bottom = screenHeight + nTop + ctrlpanelHeigh;
        MoveWindow(gP.hMain, rw.left, rw.top, rw.right, rw.bottom, TRUE);
        KVideo_Resize();
    }
    else
    { 
        // Zurück zum Fenstermodus.
        SetWindowLongPtr(gP.hMain, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE);
        MoveWindow(gP.hMain, rcSaved.left, rcSaved.top, dpi(XMIN_SIZE), dpi(YMIN_SIZE), FALSE);
        KVideo_Resize();
    }
}

gruss

Geändert von EWeiss (27. Aug 2017 um 18:04 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#37

AW: switch, break, case c++

  Alt 28. Aug 2017, 08:10
Mensch72 hat das schon ausführlich und richtig erklärt.

Bin mir nicht sicher ob das erwähnt wurde (habe mit jetzt nicht Alles durchgelesen):
Zitat:
Soweit ich C kenne, wird jeder Case Zweig durchlaufen,
Delphi-Quellcode:
switch(x)

    case 1:
        Code1;
        break;  // --> Springt raus

    case 2:
        Code2;
        break; // --> Springt raus

    case 3:
        Code3;  // --> Läuft weiter zur nächsten Anweiseung (4) 

    case 4:
        Code4;
        break; // --> Springt raus

    default:
        Code5;
}


// Bei 3 --> Code3 ... Code4
// Bei 4 --> Code4
//
// Das entspräche in etwa in Pascal (leider nicht ganz so):

  
case (expression) of
   1 : Code1;
   2 : Code2;
   3, 4: Code3_4; // So verhält sich das in Pascal, leider nicht ganz so wie in C
   else
         Code5;
end;

// Bei 3 --> Code3_4
// Bei 4 --> Code3_4
//
//--> Da muss ich in Code3_4 nochmal checken ob es jetzt aus 3 oder 4 kommt
Rollo
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#38

AW: switch, break, case c++

  Alt 28. Aug 2017, 08:17
Na ja mich interessiert weniger wie es unter Delphi abläuft das ist ja bekannt.
Mein Unverständnis liegt/lag darin das es kein festgelegte Definition gibt wie ein Break gesetzt werden muss.

Ist halt nicht das gleiche wie

Delphi-Quellcode:
X:
begin
  result := 0;
  exit; // nicht gleich break;
end;
gruss
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#39

AW: switch, break, case c++

  Alt 28. Aug 2017, 08:54
Du kannst das break überall im Code eines case-Zweigs setzten - du kannst theoretisch auch mehrere breaks an unterschiedlichen Stellen haben. Ob dabei jetzt irgendwelche Klammern (Scopes) verwendet werden oder nicht macht fürs break keinen Unterschied!
Du kannst dir das so ähnlich vorstellen wie ein Exit in Delphi - das kannst du überall innerhalb einer Funktion haben, es spring immer ans Ende der Funktion (finally Blöcke ignorieren wir mal). Ein break in einem case spring immer ans Ende des switch. Wenn dir der Debugger dazwischen noch bei irgendwelchen anderen break Zeilen stehen bleibt kannst du das ignorieren - das hängt mit dem generierten Code zusammen, macht aber keinen semantischen Unterschied.
Manuel Pöter
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#40

AW: switch, break, case c++

  Alt 28. Aug 2017, 09:14
Zitat:
Wenn dir der Debugger dazwischen noch bei irgendwelchen anderen break Zeilen stehen bleibt kannst du das ignorieren
Ok
Danke.

gruss
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 6   « Erste     234 56      


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 23:58 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