Debug Asserton Failure
-
Hallo zusammen,
versuche gerade in VC++ 6.0 einen Button direkt im Code zu erzeugen.
Hab, denk ich, alles richtig gemacht.
Fehlermeldungen bringt er mir beim Kompilieren auch nicht, aber wenn ich den Dialog starte, bekomme ich eine Fehlermeldung mit Debug Assertion Failure.Kann es sein, dass man einen Button nur über den grafischen Assistenten hinzufügen kann?
-
Drück wiederholen und zeig den Code.
-
Na gut, ist aber ziemlich viel:
void CSpielereiDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSpielereiDlg) DDX_Control(pDX, ID_TEST_BUTTON, m_test_button); DDX_Control(pDX, ID_VERIFY_BUTTON, m_verify_button);//der Aergermacher DDX_Text(pDX, IDC_PASSWORD_INPUT, m_PASSWORD); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSpielereiDlg, CDialog) //{{AFX_MSG_MAP(CSpielereiDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(ID_TEST_BUTTON, OnTestButton) ON_WM_MOUSEMOVE() ON_BN_CLICKED(ID_TRY_BUTTON, OnTryButton) ON_EN_CHANGE(IDC_PASSWORD_INPUT, OnChangePasswordInput) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSpielereiDlg Nachrichten-Handler BOOL CSpielereiDlg::OnInitDialog() { CDialog::OnInitDialog(); // Hinzufügen des Menübefehls "Info..." zum Systemmenü. // IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE); m_test_button.MoveWindow(30,30,40,50); m_test_button.SetWindowText("Log In"); m_verify_button.MoveWindow(90,90,50,40); //Größenzuweisung m_verify_button.SetWindowText("Bestätigen"); return TRUE; }
Und die Headerdatei:
class CSpielereiDlg : public CDialog { // Konstruktion public: CSpielereiDlg(CWnd* pParent = NULL); // Standard-Konstruktor // Dialogfelddaten //{{AFX_DATA(CSpielereiDlg) enum { IDD = IDD_SPIELEREI_DIALOG }; CButton m_test_button; CButton m_verify_button; CString m_PASSWORD; //}}AFX_DATA // Vom Klassenassistenten generierte Überladungen virtueller Funktionen //{{AFX_VIRTUAL(CSpielereiDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung //}}AFX_VIRTUAL // Implementierung protected: HICON m_hIcon; // Generierte Message-Map-Funktionen //{{AFX_MSG(CSpielereiDlg) virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnTestButton(); afx_msg void OnMouseMove(UINT nFlags, CPoint point); afx_msg void OnTryButton(); afx_msg void OnChangePasswordInput(); //}}AFX_MSG DECLARE_MESSAGE_MAP() };
-
Sorry, das war ein Mißverständnis.
Wo steht der grüne Pfeil, wenn du bei der Assertion "Wiederholen" drückst?Schau da mal rein: http://www.c-plusplus.net/forum/viewtopic-var-t-is-120832.html
-
Also er steigt genau an dieser Stelle aus:
DDX_Control(pDX, ID_VERIFY_BUTTON, m_verify_button);//der neu hinzugefügte
Hab ich irgendwo was vergessen zu deklarieren?
-
Hast du auch irgendwo ein new, Create(...) und ShowWindow(...) oder etwas vergleichbares zu deinem neuen, im Code erstellten Button ?
[edit]...und vergiss auch nicht das zugehörige delete an passender Stelle und das Sternchen hinter CButton im Header.[/edit]