Dialogtitel ändern



  • Hi,

    ich hoffe jemand kann mir Helfen!
    Ich möchte gerne einen erstelltenDialog für mehrere Sachen nutzen.
    Im Titel Steht Dialog1, so jetzt meine Frage wie kann ich den ändern?
    Habe es so versucht aber klappt nicht, gibt mir ne Fehlermeldung Debug Assertion Faild.

    Als Umgebung habe ich VS 2003 und will eine MFC Anwendung erstellen.

    void CmDlg::OnBnClickedButton1()
    {
    
        mMaskDlg mMaskAnlegen;
        mMaskAnlegen.SetWindowText  ("test");
    
            int ret = mMaskAnlegen.DoModal ();
        // 1 OK 2 Abbrechen
    
    }
    


  • Ist ja klar... wie soll das denn bitte gehen? Wenn der Dialog noch net da ist 😉

    Machs ganz einfach... leg nen Kontruktor mit nem Parameter LPCTSTR lpstTitle an. Dann ne Membervariable CString m_strTitle; im Konstruktor weißt du m_strTitle den wert von lpstTitle zu. In der OnInitDialog rufst du dann SetWindowText(m_strTitle); auf...



  • hi,

    danke für die antwort.

    in der klasse habe ich nur kein oninitdialog(),das ist doch ein ereigniss oder?

    wie füge ich das hinzu??

    // mMaskDlg.cpp : Implementierungsdatei
    //
    
    #include "stdafx.h"
    #include "Teilnehmer verwaltung.h"
    #include "mMaskDlg.h"
    
    // mMaskDlg-Dialogfeld
    
    IMPLEMENT_DYNAMIC(mMaskDlg, CDialog)
    mMaskDlg::mMaskDlg(CWnd* pParent /*=NULL*/)
    	: CDialog(mMaskDlg::IDD, pParent)
    	, m_Vorname(_T(""))
    {
    }
    mMaskDlg::mMaskDlg(LPCTSTR lpstTitle)
    {
    	m_StrTitle = lpstTitle; // ich hoffe du meinst es so
    
    }
    
    mMaskDlg::~mMaskDlg()
    {
    }
    
    void mMaskDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	DDX_Text(pDX, IDC_VORNAME, m_Vorname);
    }
    
    BEGIN_MESSAGE_MAP(mMaskDlg, CDialog)
    END_MESSAGE_MAP()
    
    // mMaskDlg-Meldungshandler
    

  • Administrator

    OnInitDialog ist eine überschreibbare Methode von CDialog. Ursprünglich ist es ein Ereigniss, aber in deinem Dialog holst du sie dir, indem du die Funktion überschreibst. Wie man Funktionen aus der Basisklasse mit dem Assistenten überschreibt, denke ich mal weisst du ^^

    Grüssli



  • nö, nicht direkt. 🙄



  • gut soweit hab ich das jetzt.

    aber wenn ich jetzt den dialog aufrufe, zeigt er wieder diese fehlermeldung an.

    CString Title;
    
    	Title = "Anlegen";
    
    	mMaskDlg mMaskAnlegen(Title); ;
    
    // ("test");
    
        INT_PTR ret = mMaskAnlegen.DoModal ();
    

  • Administrator

    Hmmm ja sorry, mein Fehler. Habe leider deinen Codeausschnitt nicht angeschaut, dort ist ein Fehler drin ^^

    Er hat es nämlich wohl eher so gemeint:

    mMaskDlg::mMaskDlg(CWnd* pParent /*=NULL*/, LPCTSTR lpstTitle)
        : CDialog(mMaskDlg::IDD, pParent)
        , m_Vorname(_T(""))
        , m_StrTitle(lpstTitle)
    {
    }
    

    Natürlich auch im Header angleichen. Der andere Konstruktor den du hast, führt nämlich den Standardkonstruktor von der Basisklasse nicht aus, daher kann das nichts gutes werden. Zudem in der OnInitDialog darauf schauen, dass du SetWindowText erst verwendest, nachdem die Basis Methode aufgerufen wurde. Also ca:

    BOOL mMaskDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
    
        SetWindowText(m_StrTitle);
    
        return TRUE;
    }
    

    Das sollte eigentlich funktionieren.

    Grüssli



  • hey,

    vielen lieben dank, klappt super.

    war aber bestimmt nicht das letzte mal, dass ich hier war.

    hoffe weiter auf so gute hilfe.... 👍 🙂


Log in to reply