Dialogbased App big problems
-
Hallo !
Bitte Bitte Hilfe!
Ich habe eine dilalogbasierende Anwendung. In dieser befindet sich
ein Rahmen IDR_Rahmen. In Diesen Rahmen zeichne ich mit meiner
Funktion ShowDlg(CDialog *pDlg) einen untergeordneten dialog. Wie kann ich festellen
das in diesen dlg ein button gedrück wurde, und im main dlg darauf reagieren ????Hab´s shon mit SendMessage(), WinThread(), ... probiert. Ohne Erfolg!
Währe über jeden Strohhalm glücklich !!!Auszug aus meinen source:
// ******************************************************* // * Add a new dialog for display to the main window * // ******************************************************* void AddDlg(CDialog *pDlg, unsigned short id) { CRect Rahmen; GetDlgItem(IDR_Rahmen)->GetWindowRect(&Rahmen); ScreenToClient(&Rahmen); pDlg->Creat(id, this); pDlg->MoveWindow(Rahmen); pDlg->UpdateWindow(); pDlg->ShowWindow(SW_HIDE); } void ShowDialog(CDialog *pDlg) { StartDlg.ShowWindow((pDlg == &StartDlg) ? SW_SHOW : SW_HIDE); MotionCmdDlg.ShowWindow((pDlg == &MotionCmdDlg) ? SW_SHOW : SW_HIDE); // usw ... }
mfg
Michael
-
Überschreibe im untergeordneten Dialog den Konstruktor, und gib ihm einen Handle auf den MainDlg mit.
Diesen Handle speicherst in einer Membervariable ( Ev. CDialog Pointer)
Anschl. kannst du immer Methoden des Main Dlgs aufrufen:// Konstrutkor Unterdialog
CUnterDialog::CUnterDialog(CWnd *pParentWnd): CDialog(pParentWnd)
{m_pParentWnd = (CMainDialog*)pParentWnd; //m_pParentWnd ist CMainDialog*
}
// Aufruf des MainDialogs
void CUnterDialog::OnTaste()
{
m_pParentWnd->Methode();
}// Konstrutkion des Unterdialogs
void CMainDialog::OnUnterDialog()
{
CUnterDialog dlg(this); // Gibt Handle auf unser MainWindow mit
dlg.DoModal();
}
-
Suppa !!! Danke für den Tipp, werd´s gleich mal probieren.
Viele Grüße
Michael
-
Hallo !
Hab das jetzt mal ausprobiert.
Jedoch hat das im Konstuktor nicht Funktioniert.
Habe mir nun ne inline-Funktion im UnterDlg mit namen
SetMainDlg(CWnd *pDlg) {m_pMainDlg = (CTestDlgpDlg; }; erstellt.
Wenn ich nun aber im UnterDialog in OnTest1() m_pMainDlg-> schreibe
bekomme ich alle Methoden von CDialog , jedoch nicht meine eigenen.
FuelleListe, usw...Bitte gebt mir nen Tipp was ich falsch, bzw wie ich zu meinen eigenen
Methoden komme.Habs auch über PostMessage(msg, lParam, wParam) versucht.
Merke jedoch nicht das in OnCommand() sich was endert.
Kann man diese Messages auch wo anders abfragen? Werd aus der MFC zu diesen Tema nicht schlau. Lieber wers mir wenn man die eigenen Methoden aus den HauptDlg direckt im UnterDlg verwenden könnte.Viele Grüße
Michael
-
Hi,
bei mir funzt sowas mit folgendem Code:
Im untergeordneten Dialog rufe ich SendMessage wie folgt auf (wenn knopf gedrückt):
GetParent()->SendMessage(WM_USER+200,0,0);
im Rahmen frage ich in der Winproc die message ab:
if (message==WM_USER+200))...
und siehe da es funztHoffe mal ich konnte helfen....
-
Hallo
Suppa!!! Danke jetzt funkt´s!
@ "der Digge" Danke Dir, hab es jetzt mit Deiner Variante implementiert.
@ "-" auch Dir Danke, falls Du diesen Beitrag liest, köntest du
mir sagen, ob es mit Deiner Variante auch möglich ist eigene
Memberfunktionen zu verwenden. Währe nämlich für Zukünftige Projekte
sehr nützlich.Viele Grüße
Michael