IDC_Static Feld freigeben
-
Wie meinst Du das, den ganzen Dialog neuzeichnen mit den genannten Funktionen?
CWnd* pParent = GetDlgItem(IDD_GAMIGOTV_DIALOG); pParent->Invalidate(); pParent->RedrawWindow(); UpdateWindow();Klappt so net

-
Ne, einfach die Funktionen auf die CDialog-Klasse anwenden.
Also praktisch in einer CDialog - Methode
this->blablabla
aufrufen (wobei this nicht nötig ist).Grüße Rapha
-
Ich raff es net.
Keine Besserung, was ich auch mache

Kannst Du mir vieleicht mal erklären, wie man mit CStatic::Create
ein Steuerelement zur Laufzeit erzeugt. Vieleicht geht es ja, wenn ich das Static-Feld beim Videostart komplett neu erzeuge und bei Stop mit Destroy zerstöre?Ich hab es gerade schon die ganze Zeit versucht, krieg es aber irgendwie nicht hin.
-
Hi
Erstelle einfach ein neues CStatic Objekt (entweder als Membervariable in der Dialogklasse oder mit new => es darf nicht lokal sein) und rufe Create auf.
Die Parameter von CStatic::Create kannst du in der MSDN nachschlagen.Dies ist aber keine so gute Lösung.
Erzwinge einfach einen Dialogrefreshz.B. so
void CDeinDlg::OnButton1() { // blablabla // weiß nicht, welche Funktion die beste ist, probiere einfach mal folgende aus: Invalidate(); RedrawWindow(); UpdateWindow(); }Grüße Rapha
-
Das hab ich bereits gemacht, klappt ja nicht.
-
hier noch zwei ideen
-ShowWindow(SW_FALSE); auf das static bevor du es zerstörst
-CPaintDC dc(this);
dc.PatBlt(...);
-
Trikor schrieb:
CWnd* pParent = GetDlgItem(IDD_GAMIGOTV_DIALOG); pParent->Invalidate(); pParent->RedrawWindow(); UpdateWindow();Eieiei, ob es so funktioniert, kann ich nicht sagen.
Habs noch nie so funktioniert, da das ziemlich unlogisch ist
Versuchs mal so, wie ichs in meinem vorherigen Post beschrieben hab.Grüße Rapha
-
Das hab ich doch auch schon lange verworfen.
Hab gehoft, es sieht keiner.

-
Habs nochmal ausprobiert
Invalidate()
und
RedrawWindow()müssten funktionieren.
Grüße Rapha
-
Trikor schrieb:
Das hab ich doch auch schon lange verworfen.
Hab gehoft, es sieht keiner.

Habs anhand einer kleinen Testanwendung versucht:
Kannst dir das Beispiel ja mal anschauen:
http://mitglied.lycos.de/rame03/files.htm (Dateiname: update.zip)Grüße Rapha
-
Aber leider nicht bei mir
Ich poste mal ein bissle Code
Vorschau starten
CComBSTR bstrName = NULL; // Initialize the COM library and retrieve a pointer // to an IWMEncoder interface. hr = CoInitialize(NULL); if ( SUCCEEDED( hr ) ) { hr = CoCreateInstance(CLSID_WMEncoder, NULL, CLSCTX_INPROC_SERVER, IID_IWMEncoder, (void**) &pEncoder); } // Retrieve a pointer to an IWMEncSourceGroupCollection interface. if ( SUCCEEDED( hr ) ) { hr = pEncoder->get_SourceGroupCollection(&pSrcGrpColl); } // Add a source group to the collection. if ( SUCCEEDED( hr ) ) { hr = pSrcGrpColl->Add(CComBSTR("SG_1"), &pSrcGrp); } // Add a video source and an audio source. if ( SUCCEEDED( hr ) ) { hr = pSrcGrp->AddSource(WMENC_VIDEO, &pSrcVid); } // Specify the sources. if ( SUCCEEDED( hr ) ) { hr = pSrcVid->SetInput(CComBSTR("Device://"+m_strVideo)); } // Specify the output. if ( SUCCEEDED( hr ) ) { hr = pEncoder->get_Broadcast(&pBrdCst); } if ( SUCCEEDED( hr ) ) { hr = pBrdCst->put_PortNumber(WMENC_PROTOCOL_HTTP, 8080); } // Select the 5th profile from the collection and set it into the source group. if ( SUCCEEDED( hr ) ) { hr = pEncoder->get_ProfileCollection(&pProColl); } if ( SUCCEEDED( hr ) ) { hr = pProColl->Item(4, &pPro); } if ( SUCCEEDED( hr ) ) { hr = pSrcGrp->put_Profile(CComVariant(pPro)); } // Retrieve a pointer to a preview object. if ( SUCCEEDED( hr ) ) { hr = CoCreateInstance( CLSID_WMEncPreview, NULL, CLSCTX_INPROC_SERVER, IID_IWMEncDataView, (void**)&pPreview); } // Retrieve the preview collection. if ( SUCCEEDED( hr ) ) { hr = pSrcVid->get_PreviewCollection( &pPreviewColl ); } // Add the postiew object to the data view collection. If you set the // cookie to -1, the encoder engine automatically generates a unique cookie. long lCookie = -1; if ( SUCCEEDED( hr ) ) { hr = pPreviewColl->Add(pPreview, &lCookie); } // Continue configuring the encoder engine. // Initialize the encoder engine. if ( SUCCEEDED( hr ) ) { hr = pEncoder->PrepareToEncode(VARIANT_TRUE); } // Handle von IDC_VIDEO übergeben. m_pControl = GetDlgItem(IDC_VIDEO); hControl = m_pControl->GetSafeHwnd(); if ( SUCCEEDED( hr ) ) { hr = pPreview->SetViewSetting((DWORD) lCookie, sizeof(hControl), (BYTE*)&hControl); } // Start encoding. if ( SUCCEEDED( hr ) ) { hr = pEncoder->Start(); } // Start viewing the stream in a pop-up window. if ( SUCCEEDED( hr ) ) { hr = pPreview->Start(lCookie); } // Vorschau sichtbar machen GetDlgItem(IDC_VIDEO)->ShowWindow(TRUE); GetDlgItem(IDC_INKPICTURE1)->ShowWindow(FALSE); UpdateWindow(); // Button aktivieren bzw. deaktivieren GetDlgItem(IDC_VIEWSTART)->EnableWindow(FALSE); GetDlgItem(IDC_VIEWSTOP)->EnableWindow(TRUE); m_bPreviewStart = TRUE; // Retrieve a pointer to an IWMEncDataView2 interface. if ( SUCCEEDED( hr ) ) { hr = pPreview->QueryInterface(IID_IWMEncDataView2, (void**)&pPreview2); } // Set the view to available. if ( SUCCEEDED( hr ) ) { hr = pPreview2->put_ViewAvailable(lCookie, VARIANT_TRUE); } // Determine whether the view is available. VARIANT_BOOL bIsViewAvailable; if ( SUCCEEDED( hr ) ) { hr = pPreview2->get_ViewAvailable(lCookie, &bIsViewAvailable); } // Setzen der Bildwiederholrate if ( SUCCEEDED( hr ) ) { hr = pPreview2->put_FrameRateBalance(lCookie, VARIANT_TRUE); } // Prüfen ob die Bildwiederholrate stimmt VARIANT_BOOL bIsBalanced; if ( SUCCEEDED( hr ) ) { hr = pPreview2->get_FrameRateBalance(lCookie, &bIsBalanced); } // Prüfen ob Ansicht vorhanden ist VARIANT_BOOL bIsRunning; if ( SUCCEEDED( hr ) ) { hr = pPreview2->IsRunning(lCookie, &bIsRunning); } m_lCookieTemp = lCookie;Vorschau stoppen
GetDlgItem(IDC_VIDEO)->ShowWindow(FALSE); GetDlgItem(IDC_INKPICTURE1)->ShowWindow(TRUE); UpdateWindow(); // Stop the encoding process. GetDlgItem(IDC_VIEWSTART)->EnableWindow(TRUE); GetDlgItem(IDC_VIEWSTOP)->EnableWindow(FALSE); // Prüfvariable korrigieren m_bPreviewStart = FALSE; // When finished, stop the preview. if ( SUCCEEDED( hr ) ) { hr = pPreview->Stop(m_lCookieTemp); } // Stop the encoding process. if ( SUCCEEDED( hr ) ) { hr = pEncoder->Stop(); } Invalidate(); RedrawWindow(); UpdateWindow(); m_pControl = NULL; delete m_pControl; // Release pointers. if ( pPreview != NULL) { pPreview->Release(); pPreview = NULL; delete pPreview; } if ( pPreview2 != NULL) { pPreview2->Release(); pPreview2 = NULL; delete pPreview2; } if ( pPreviewColl ) { pPreviewColl->Release(); pPreviewColl = NULL; delete pPreviewColl; } if ( pSrcGrpColl ) { pSrcGrpColl->Release(); pSrcGrpColl = NULL; delete pSrcGrpColl; } if ( pSrcGrp ) { pSrcGrp->Release(); pSrcGrp = NULL; delete pSrcGrp; } if ( pSrcVid ) { pSrcVid->Release(); pSrcVid = NULL; delete pSrcVid; } if ( pProColl ) { pProColl->Release(); pProColl = NULL; delete pProColl; } if ( pPro ) { pPro->Release(); pPro = NULL; delete pPro; } if ( pEncoder ) { pEncoder->Release(); pEncoder = NULL; delete pEncoder; } // Prüfvariable korrigieren m_bPreviewStart = FALSE;
-
die dritte zeile is falsch plaziert und unnötig
pPreview->Release();
pPreview = NULL;
delete pPreview;hier isses ganz falsch
m_pControl = NULL;
delete m_pControl;
-
pPreview muß ich doch wieder freigeben, da die Vorschau ja beendet wurde und m_pControl ist der Pointer auf das IDC_VIDEO (Static-Feld indem das Video läuft) als Membervariable deklariert.
Was soll daran falsch sein.
-
1. sorgst du erst dafür, dass der zeiger auf "nichts" zeigt, dann willst du das "nichts" löschen
2. com objekte musst du nich mit delete löschen
release und auf 0 setzen reicht
-
ach ja, wenn es einer Testen will.
Dazu braucht Ihr die Windows Media Encoder 9 SDK
http://www.microsoft.com/downloads/details.aspx?FamilyID=000a16f5-d62b-4303-bb22-f0c0861be25b&displaylang=en
-
Kommen wir wieder zurück, das CStatic dynamisch zu erstellen.
Global
CStatic* pVideo = new CStatic;in Funktion OnPreviewStart()
pVideo->Create(NULL,SS_ENHMETAFILE | WS_VISIBLE,re,this,IDC_VIDEO);In Funktion OnPreviewStop()
pVideo->ShowWindow(FALSE); pVideo->DestroyWindow();so weit, so gut.
Aber wie krieg ich jetzt wieder pVideo erzeugt?
Global erstellt, durch DestroyWindow() zerstört.