MFC und DirectX?
-
am besten in nem eigenen thread
-
außerdem sind beim directx sdk samples für mfc dabei. guck einfach wie die das gemacht haben.
-
@Artchi
Also einen LevelEditor für 3D Games in GDI? Naja das wäre mir zu vielDas mit den Threads is ne Gute Idee
Danke
Achja noch was: gibt es irgendwo nen ort, wo man die Run() sich anschauen kann? In der MSDN find ich nix
-
Hallo,
hab mal ein bischen gestöbert. Wenn du die Sourcen der MFC auf deiner Platte hast, kannste da mal suchen.
Die 'CWinApp:Run()' hab ich in der 'APPCORE.CPP' gefunden. Dort wird aber auch nur 'CWinThread::Run()' aufgerufen, die ich in 'THRDCORE.CPP' gefunden habe.
Und nach meinem leihenhaften Blick, siehts da ganz gewaltig nach 'ner Message-Schleife aus.Gruß mathi
[ Dieser Beitrag wurde am 13.12.2002 um 17:28 Uhr von mathi editiert. ]
-
@Mathi:
Danke jetzt komm ich klarWinAPI rult halt *ggg*
-
Die richtige Schleife ist aber erst in AfxInternalPumpMessage
-
Original erstellt von <*ggggggggg*>:
Die richtige Schleife ist aber erst in AfxInternalPumpMessageKann es sein, dass du uns nur ärgern willst? Das es dann bei PumpMessage weiter geht is ja klar, aber AfxInternal... gibts doch garnicht, oder?
Kann mal jemand bestätigen?
-
Hab eigentlich keine Ahnung von DirectX,aber bremsen die MFC DirectX nicht enorm aus??
MfG Spacelord
-
in PumpMessage wird AfxInternalPumpMessage aufgerufen
-
Original erstellt von <jo,>:
in PumpMessage wird AfxInternalPumpMessage aufgerufenIch werd gleich noch Bekloppt, ich find's nicht. Meinst du in 'CWinThread::PumpMessage()' da steht nix von AfxInternal...!
Naja, hab ich wohl eine andere MFC-Version.
In der MSDN find ich auch nix.
-
Der Sourcecode der MFC liegt offen. Bei MS VC++ 6 findet man die Dateien bei Installation nach Laufwerk C: z.B. in folgendem Verzeichnis:
C:\Programme\Microsoft Visual Studio\VC98\MFC\SRC\...Nachrichtenpumpe:
Die MFC-Funktion (siehe thrdcore.cpp) befreien wir zunächst von allen nur im Debug-Modus durchgeführten Schritten, und wir erhalten den folgenden kompakten Sourcecode:
BOOL CWinThread::PumpMessage() { if (!::GetMessage(&m_msgCur, NULL, NULL, NULL)) return FALSE; if (m_msgCur.message != WM_KICKIDLE && !PreTranslateMessage(&m_msgCur)) { ::TranslateMessage(&m_msgCur); ::DispatchMessage(&m_msgCur); } return TRUE; }
In dieser Funktion befinden sich typische MFC-Programme die meiste Zeit. Das ist die WinAPI-Nachrichtenpumpe, wie sie leibt und lebt: Nachrichten erfassen, übersetzen und verteilen.
Zum Vergleich die typische Original-WinAPI-Variante:
// WinAPI-Nachrichtenpumpe MSG msg; while( GetMessage( &msg, NULL, 0, 0) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } return msg.wParam;
-
///////////////////////////////////////////////////////////////////////////// // CWinThread implementation helpers BOOL CWinThread::PumpMessage() { return AfxInternalPumpMessage(); }
thrdcore.cpp(915)
Das stammt allerdings auf Visual Studio .NET. Vielleicht hast du ja dier 6er und das wurde geändert. Is ja auch so ziemlich egal, hauptsache es funktioniert.
-
Danke! beim .NET hab ich's schließlich gefunden. Hab zuvor nur bei der 6.0 Version gesucht.