![]() |
case von to
Wie kann ich in C++ das verwirklichen.
Delphi-Quellcode:
ID_SELECTAUDIOSTREAM .. ID_SELECTAUDIOSTREAM_LAST:
Code:
funktioniert nicht da mir der Bereich zwischen beiden Fehlt.
case ID_SELECTAUDIOSTREAM:
case ID_SELECTAUDIOSTREAM_LAST: gruss |
AW: case von to
Gibt es in dieser Form leider nicht und muss deshalb mit
Delphi-Quellcode:
gelöst werden. Hier der Thread hat ein paar interessante Alternativen:
if
![]() |
AW: case von to
Zitat:
gruss |
AW: case von to
Scheint etwas kompliziert zu sein..
Meine Ausgangsbasis.
Code:
Ich erstelle hier ein Menu mit Submenus
// AudioStreams zum Menu addieren
hSubMenuAudio = CreatePopupMenu(); AppendMenuW(hMenu, MF_STRING | MF_POPUP, (UINT_PTR)hSubMenuAudio, L"Select audio stream"); if (aMediaProperty.NumAudioStream == 0) EnableMenuItem(hMenu, 6, MF_POPUP | MF_BYPOSITION | MF_DISABLED); else { int IntI = 0; UINT_PTR AudioStreamID; for (IntI = 0; IntI < aMediaProperty.NumAudioStream; IntI++) { if (KVideo_GetStreamInfo(stAudio, IntI, &StreamInfo)) { EnableMenuItem(hMenu, 6, MF_POPUP | MF_BYPOSITION | MF_ENABLED); AudioStreamID = ID_SELECTAUDIOSTREAM + IntI; AppendMenuW(hSubMenuAudio, MF_STRING | MFT_RADIOCHECK, AudioStreamID, StreamInfo.ppszName); } if (IntI == 0) CheckMenuItem(hSubMenuAudio, ID_SELECTAUDIOSTREAM, MF_CHECKED); } } Abhängig von den AudioStreams die vorhanden sind erhöhe ich die ID.
Code:
Der Bereich der Maximalen ID ist festgelegt.
AudioStreamID = ID_SELECTAUDIOSTREAM + IntI;
Code:
Wenn es so wie in Delphi nicht geht wie soll ich dann die Value in der WinProc analysieren.
#define ID_SELECTAUDIOSTREAM 32800
#define ID_SELECTAUDIOSTREAM_LAST 32809 // 9 Einträge Reserviert Die Beispiele sind etwas verworren ;) gruss |
AW: case von to
OK dann zurück zu DOS Zeiten.
Also das hat Delphi besser gelöst. thumbs-up für Delphi. Eventuell auf Max 4 einstellen kann mir nicht vorstellen das es mehr als 4 AudioStreams in einem Video gibt.
Code:
gruss
case ID_SELECTAUDIOSTREAM:
case ID_SELECTAUDIOSTREAM + 1: case ID_SELECTAUDIOSTREAM + 2: case ID_SELECTAUDIOSTREAM + 3: case ID_SELECTAUDIOSTREAM + 4: case ID_SELECTAUDIOSTREAM + 5: case ID_SELECTAUDIOSTREAM + 6: case ID_SELECTAUDIOSTREAM + 7: case ID_SELECTAUDIOSTREAM + 8: case ID_SELECTAUDIOSTREAM_LAST: { TPlayerState ps = KVideo_GetPlayerState(); if (ps == psNotReady) return 0; if (ps == psPlaying) KVideo_Pause(); DWORD AudioSelectItem = (DWORD)wParam - ID_SELECTAUDIOSTREAM; KVideo_SelectAudioStream(AudioSelectItem); CheckMenuItem(hSubMenuAudio, (UINT)wParam, MF_CHECKED); MenuAudioChecked = AudioSelectItem; if (ps == psPlaying) KVideo_Play(); } break; |
AW: case von to
Was du auch noch machen kannst:
Code:
switch (value)
{ case EXPR1: break; case EXPR2: break; default: { if ((value >= EXPR_MIN) && (value <= EXPR_MAX)) { // Handle event } } } |
AW: case von to
Zitat:
Danke. gruss |
AW: case von to
Oder statt case einfach ein if verwenden:
Code:
if ((x >= ID_SELECTAUDIOSTREAM) && (x <= ID_SELECTAUDIOSTREAM_LAST)) {
} |
AW: case von to
Zitat:
Ok so geht's..
Code:
Nur für WM_COMMAND den rest habe ich als Case belassen.
case WM_COMMAND:
{ wpItem = LOWORD(wParam); if (wpItem == ID_SHOWPLAYBACKPOSITION) { if (bPBchecked) { CheckMenuItem(hMenu, ID_SHOWPLAYBACKPOSITION, MF_UNCHECKED); bPBchecked = FALSE; if (KVideo_HasOverlayImage()) KVideo_UpdateOverlayImage(0); } else { CheckMenuItem(hMenu, ID_SHOWPLAYBACKPOSITION, MF_CHECKED); bPBchecked = TRUE; } } else if (wpItem == ID_KEEPASPECTRATIO) { if (bARchecked) { CheckMenuItem(hMenu, ID_KEEPASPECTRATIO, MF_UNCHECKED); KVideo_KeepAspectRatio(FALSE); bARchecked = FALSE; } else { CheckMenuItem(hMenu, ID_KEEPASPECTRATIO, MF_CHECKED); KVideo_KeepAspectRatio(TRUE); bARchecked = TRUE; } } else if (wpItem == ID_SHOWMEDIAFILEPROPERTY) { if (!bFullScreen) KVideo_ShowMediaInfo(); } else if ((wpItem >= ID_SELECTAUDIOSTREAM) && (wpItem <= ID_SELECTAUDIOSTREAM_LAST)) { TPlayerState ps = KVideo_GetPlayerState(); if (ps == psNotReady) return 0; if (ps == psPlaying) KVideo_Pause(); DWORD AudioSelectItem = (DWORD)wParam - ID_SELECTAUDIOSTREAM; KVideo_SelectAudioStream(AudioSelectItem); CheckMenuItem(hSubMenuAudio, (UINT)wParam, MF_CHECKED); MenuAudioChecked = AudioSelectItem; if (ps == psPlaying) KVideo_Play(); } else if ((wpItem >= ID_SELECTVIDEOSTREAM) && (wpItem <= ID_SELECTVIDEOSTREAM_LAST)) { TPlayerState ps = KVideo_GetPlayerState(); if (ps == psNotReady) return 0; if (ps == psPlaying) KVideo_Pause(); DWORD VideoSelectItem = (DWORD)wParam - ID_SELECTVIDEOSTREAM; KVideo_SelectVideoStream(VideoSelectItem); CheckMenuItem(hSubMenuVideo, (UINT)wParam, MF_CHECKED); MenuVideoChecked = VideoSelectItem; if (ps == psPlaying) KVideo_Play(); } else if (wpItem == ID_SUBTITLECONFIG) { if (KVideo_GetPlayerState() == psNotReady) { MessageBox(hWnd, L"Sub title configuration page can be shown after opening a media file.", L"Confirm", MB_OK); return 0; } BOOL bRegistered = FALSE; BOOL bLoaded = FALSE; KVideo_XySubFilterState(&bRegistered, &bLoaded); if (!bRegistered) { MessageBox(hWnd, L"Filter for sub title display (xySubFilter.dll) is not registered.", L"Confirm", MB_OK); return 0; } if (!bLoaded) MessageBox(hWnd, L"Filter for sub title display (xySubFilter.dll) is not loaded.", L"Confirm", MB_OK); else Show_XySubFilterPropertyPage(); } } gruss |
AW: case von to
Häh? x ist der Wert den du vergleichen willst (also case(x)). Verstehe jetzt nicht, was du meinst.
Edit: Da kam dein Edit dazwischen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz