Anzeige aktualisieren ?
-
Hallo Zusammen
Ich habe eine dialog anwendung "MidiTestDlg.h"
wie kann ich die anzeige im dialogfeld mit der funktion ProcessMidiBeat(void)
verbinden so das beats angezeigt werden ?weiss nicht wie ich es machen soll!
Über ein Button Funktioniert es.m_BeatAnzeige.Format("%d",Sync->beats);
UpdateData(false);Aber es soll immer angezeigt werden ohne Button
Kann mir jemand helfen bitte
void MySync::ProcessMidiBeat(void)
{
beats++;//todo beat ausgabe im setupdlg
// force any and all views to update the beats display
/*CFrameWnd* pMainFrm = GetParentFrame();
CDocument* pDoc = pMainFrm->GetActiveDocument();
pDoc->UpdateAllViews(NULL);*/
}Grüße Can
-
Servus,
ähm ja ich glaube mit dem was du uns gegeben hast, kann man nicht soviel anfangen. Ich denke mal, was ein bisschen hervorgeht, das du gerne ständig eine Variable ausgespuckt haben willst. Dann solltest du diese immer in einer Funktion, welche dauerhaft aufegrufen wird, auf dem Dlg ausgeben oder du baust dir einen Timer, welcher in bestimmten Abständen dir eine Ausgabe erzeugt.
Stichworte für MSDN: WM_TIMER, OnTimer(), SetTimer(), KillTimer()
Ich weiss ja nicht wie, was, warum und überhaupt, keine Ahnung??? *muhh* das Programm macht, deswegen kann man nur raten.....
*winke*
Hellsgore
-
So wie es Hellsgore schon vorgeschlagen hat, würde ich es auch machen.
Also: Benutze einen Timer und ruf deine Funktion alle heilige Zeit(oder kürzer) einfach solange auf bis du keine Lust mehr drauf hast.
void CMidiTestDlg::OnTimer(UINT nIDEvent) { if(nIDEvent==DeinEvent) { ProcessMidiBeat(void); m_BeatAnzeige.Format("%d",Sync->beats); UpdateData(false); } }Die Aufrufe:
SetTimer(DEIN_MIDI_TIMER, 500, NULL);
KillTimer(DEIN_MIDI_TIMER);Ist es das, was du suchst?
gerhardt
-
Falls du von Timern keine Ahnung hast kann ich dir dieses Tutorial
bestens empfehlen :http://www.diabolo666.com/tutorials/c++/Vcplus6/kap04.htm
Gruß
:: NoName ::
-
Hallo zusammen
Danke für die Antworten!!Den Teimer einzusetzen ist der falsch weg weil die klasse MySync schon wie ein Teimer Funktioniert.Es gibt die Beats (Takt) in einem MidiFile.
wenn das MidiFile gestartet wird.dann sendet die funktion
void MySync::ProcessMidiBeat(void)
den Beat in einem MidiFile songAlso ich denke ich müsste ergend wie die HauptDlg.h in MySync.h bekannt machen und das textfeld Aktualisieren.
Andere Klassen In HaupDialog Klasse bekannt zu machen ist kein problem
Aber wenn ich die HaupDlg.h Klasse in anderen klassen wie MySync bekannt machen möchte und eine instanz anlegen will funktioniert es nicht.Hier die MySync Klasse
//===========================================================================
// MySync Class
//===========================================================================
#include "stdafx.h"
#include "MySync.h"BEGIN_MESSAGE_MAP(MySync, CMaxMidiSync)
//{{AFX_MSG_MAP(MySync)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()//---------------------------------------------------------------------------
// Constructor
//---------------------------------------------------------------------------
MySync::MySync()
{
beats = 0;
IsRecording(FALSE);
}/////////////////////////////////////////////////////////////////////////////
// MySync virtual functions//---------------------------------------------------------------------------
// ProcessSyncDone
//---------------------------------------------------------------------------
void MySync::ProcessSyncDone(void)
{
// stop playback, but only if not recording
if(!IsRecording())
Stop();
//todo evt. im loop laufen lassen wenn ende erreicht
}//---------------------------------------------------------------------------
// ProcessMidiBeat
//---------------------------------------------------------------------------
void MySync::ProcessMidiBeat(void)
{
beats++;//todo beat ausgabe im setupdlg
// force any and all views to update the beats display
/*CFrameWnd* pMainFrm = GetParentFrame();
CDocument* pDoc = pMainFrm->GetActiveDocument();
pDoc->UpdateAllViews(NULL);*/
}Dieser code ist normale weise eine MenueAnwendung
ich habe ein teile ausgeklammer.das ausgeklammerte teil Aktualiesiert die beat anzeige im MenueFeld. der code muss doch auch ergendwie für Dialog Anwendung geben.oder wenn ich von MySync.cpp aus zugriff auf die Members der HauptDialog klasse hätte. währe mein problem gelöst.
Grüße Can
-
Ein Timer ist sowieso der falsche WEG selbst wenn deine Klasse bereits irgendwie einen Timer verwendet oder was auch immer.
Was Du brauchst sind Threads.
Stichwort: CWinThread