Problem mit MessageBox
-
Ich bin noch ein ziemlicher Anfänger in Sachen C++.
ich habe mich jetzt mal mit der MessageBox beschäftigt, doch jedes Mal wenn ich das Projekt debuggen will kommt folgende Fehlermeldung1>c:\dokumente und einstellungen\hause\eigene dateien\visual studio 2010\projects\hallo\hallo\hallodlg.cpp(162): error C2664: 'CWnd::MessageBoxW': Konvertierung des Parameters 1 von 'const char [50]' in 'LPCTSTR' nicht möglich
Hier der Code
return TRUE; // TRUE zurückgeben, wenn der Fokus nicht auf ein Steuerelement gesetzt wird } void ChalloDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // Wenn Sie dem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie // den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das // Dokument/Ansicht-Modell verwenden, wird dies automatisch ausgeführt. void ChalloDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // Gerätekontext zum Zeichnen SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // Symbol in Clientrechteck zentrieren int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Symbol zeichnen dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } // Die System ruft diese Funktion auf, um den Cursor abzufragen, der angezeigt wird, während der Benutzer // das minimierte Fenster mit der Maus zieht. HCURSOR ChalloDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void ChalloDlg::OnBnClickedHello(void) { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die // Benachrichtigung ein. // Benutzer begrüßen MessageBox("Hallo. Dies ist meine erste Visual C++ Anwendung!"); }
wäre nett, wenn sich das mal jemand anschauen könnte
-
Beschäftige Dich mal mit dem Thema TCHAR.
=>MessageBox(_T("Hallo. Dies ist meine erste Visual C++ Anwendung!"));
-
Alternativ könntest du in den Projekteinstellungen von Unicode auf MBCS umstellen, wenn dich der Verzicht auf Unicode nicht stört. Du solltest dich mal informieren, was es mit Unicode auf sich hat.
-
vielen dank für die schnelle Antwort.
-
Ich hab mir jetzt mal einiges zu Unicode und TCHAR reingezogen. Trotzdem verstehe ich immer noch nicht, was das ganze mit der MessageBox zu tun hat
-
zeus111 schrieb:
Ich hab mir jetzt mal einiges zu Unicode und TCHAR reingezogen. Trotzdem verstehe ich immer noch nicht, was das ganze mit der MessageBox zu tun hat
Mach im VS Rechtsklick auf "MessageBox" und "Gehe zu Deklaration", dann siehst du, dass MessageBox nur ein define ist, für dass entweder MessageBoxA oder MessageBoxW eingesetzt wird. Bei einem Unicode-Projekt (wenn _UNICODE definiert ist) nutzt du also die Funktion MessageBoxW, und die möchte von dir einen Zeiger auf einen Widestring als Argument haben. Daher die Fehlermeldung. Und wenn du dir nun mal das TCHAR-Makro ansiehst, wird dir sicher schnell klar, was es macht und wieso dein Fehler damit verschwindet.
-
vielen dank jetzt verstehe ich es