Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » WinAPI Frage

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.03.2006, 20:21 Uhr
~Gallifeld
Gast


Da ich mich etwas mit der WinAPI beschäftigen wollten, wollte ich das Beispielprogramm für ein simples MessageBox-FEnster einfach mal kompilieren...klappt natürlich nicht.
Das Beispiel ist ovn dieser Seite:
www.win-api.de/tutorials.php?tutid=2

Hier mal der Code
C++:
#include "stdafx.h"
#include <windows.h>

const char  szWitz[] = "\"Ich steh' schwer auf Umweltschutz\", sagt Peter.\n"
                       "\"Ich werfe zum Beispiel alte U-Bahn-Fahrscheine nie weg,\n"
                       "sondern benutze sie mehrmals.\"";

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
    int iAntwort = MessageBox(NULL, szWitz, "Ha, ha, ha, ha...",MB_ICONINFORMATION | MB_OKCANCEL | MB_DEFBUTTON1);
    if (IDOK == iAntwort)
    {
      MessageBox(NULL, "Ja, ich finde den Witz auch Ok...",
                       "Sie haben auf Ok gedrückt",
                       MB_ICONINFORMATION | MB_OK | MB_DEFBUTTON1);
    }
    else if (IDCANCEL == iAntwort)
    {
      MessageBox(NULL, "Ja, warum haben sie denn auf Abbrechen gedrückt?\n"
                       "Hat ihnen der Witz etwa nicht gefallen?",
                       "Sie haben auf Abbrechen gedrückt",
                       MB_ICONINFORMATION  | MB_OK | MB_DEFBUTTON1);
    }

    return 0;
}


Als Fehler wird folgendes ausgeworfen: "error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [137]' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast"

Er mag anscheined den string nicht, den er als zweiten Parameter übergeben bekommt, natürlich sind internet quellen keine garantie für Funktionalität. Aber so ganz verstehen tu ich es nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.03.2006, 21:17 Uhr
Spacelord
Hoffnungsloser Fall


Hallo,
probier es mal mit

C++:
const wchar_t  szWitz[]....


oder schau dir mal TCHAR an.
Dein Problem ist auf jeden Fall dass er die Unicode Variante von MessageBox mit nem ANSI String "füttern" will.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.03.2006, 21:18 Uhr
xXx
Devil


hmm machs entweder mit nem char pointer oder mach aus const char [] einfach LPCWSTR...

bei dem char pointer kopierst de den string inhalt einfach mit strcpy darein
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.03.2006, 22:28 Uhr
~Gallifeld
Gast


Hm, also mit dem wchar_t und dem tchar klappt nicht, oder ich habs falsch gemacht.

Einfach den const char [] zu einem LPCWSTR zu machen klappt auch nicht. Die Sache mit dem strcpy versteh ich nicht, worauf willst du hinaus?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
26.03.2006, 22:34 Uhr
Spacelord
Hoffnungsloser Fall


Da fehlen noch die Konvertierungen nach Unicode (das sind die ganzen L´s in dem Quellcode).


C++:
#include <windows.h>

const wchar_t szWitz[] = L"\"Ich steh' schwer auf Umweltschutz\", sagt Peter.\n"
                       L"\"Ich werfe zum Beispiel alte U-Bahn-Fahrscheine nie weg,\n"
                       L"sondern benutze sie mehrmals.\"";

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
    int iAntwort = MessageBox(NULL, szWitz, L"Ha, ha, ha, ha...",MB_ICONINFORMATION | MB_OKCANCEL | MB_DEFBUTTON1);
    if (IDOK == iAntwort)
    {
      MessageBox(NULL, L"Ja, ich finde den Witz auch Ok...",
                       L"Sie haben auf Ok gedrückt",
                       MB_ICONINFORMATION | MB_OK | MB_DEFBUTTON1);
    }
    else if (IDCANCEL == iAntwort)
    {
      MessageBox(NULL, L"Ja, warum haben sie denn auf Abbrechen gedrückt?\n"
                       L"Hat ihnen der Witz etwa nicht gefallen?",
                       L"Sie haben auf Abbrechen gedrückt",
                       MB_ICONINFORMATION  | MB_OK | MB_DEFBUTTON1);
    }

    return 0;
}



Welche IDE benutzt du? Irgendwo in den Projekteinstellungen kannst du sicherlich einstellen dass die Anwendung nicht mit Unicode kompiliert,dann kannst du das Beispiel so nutzen wie es ist.Ist ja eher nervig wenn du sämtliche Beispiele immer erst auf Unicode umstricken musst.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.03.2006, 22:42 Uhr
Spacelord
Hoffnungsloser Fall


Noch besser wäre ne Lösung mit TCHAR und TEXT.Damit kannst du ein und den selben Quellcode für Unicode oder ANSI Zeichenfolgen kompilieren.

C++:
#include <windows.h>

const TCHAR szWitz[] = TEXT("\"Ich steh' schwer auf Umweltschutz\", sagt Peter.\n")
                       TEXT("\"Ich werfe zum Beispiel alte U-Bahn-Fahrscheine nie weg,\n")
                       TEXT("sondern benutze sie mehrmals.\"");

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
    int iAntwort = MessageBox(NULL, szWitz, TEXT("Ha, ha, ha, ha..."),MB_ICONINFORMATION | MB_OKCANCEL | MB_DEFBUTTON1);
    if (IDOK == iAntwort)
    {
      MessageBox(NULL, TEXT("Ja, ich finde den Witz auch Ok..."),
                       TEXT("Sie haben auf Ok gedrückt"),
                       MB_ICONINFORMATION | MB_OK | MB_DEFBUTTON1);
    }
    else if (IDCANCEL == iAntwort)
    {
      MessageBox(NULL, TEXT("Ja, warum haben sie denn auf Abbrechen gedrückt?\n")
                       TEXT("Hat ihnen der Witz etwa nicht gefallen?"),
                       TEXT("Sie haben auf Abbrechen gedrückt"),
                       MB_ICONINFORMATION  | MB_OK | MB_DEFBUTTON1);
    }

    return 0;
}



MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
29.03.2006, 08:36 Uhr
~Gallifeld
Gast


Cool, das klappt.

Wo nach muss ich suchen um mehr Infos über dieses L zu finden, das du in deinem oberen Beispiel benutzt hast? Da gibts doch sicherlich noch mehr Varianten?!?

Ich nutze die IDE Visual Studio 2k5, hab mal geguckt, aber eine Option wo ich das hätte umstellen können, hab ich nciht gefunden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
29.03.2006, 13:17 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi im Visual Studio 2005 steht das defaultmäßig auf unicode.

Musst nur in Projektoptionen unter Allgemein bei Zeichensatz "Nicht festgelegt" auswählen, neukompilieren, und schon hat der SingleByte-Zeichensatz
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
29.03.2006, 15:10 Uhr
Spacelord
Hoffnungsloser Fall



Zitat von ~Gallifeld:

Wo nach muss ich suchen um mehr Infos über dieses L zu finden, das du in deinem oberen Beispiel benutzt hast? Da gibts doch sicherlich noch mehr Varianten?!?



http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/unicode_6bqr.asp

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: