ďťż

Ładny brzuch

Witam,
przy rejsetracji okna i jego tworzeniu pojawiaja mi sie błędy:

1. błąd jest tutaj
WNDCLASSEX KlasaOkna; ZeroMemory (&KlasaOkna, sizeof(WNDCLASSEX)); KlasaOkna.cbSize = sizeof(WNDCLASSEX); KlasaOkna.hInstance = hInstance; KlasaOkna.lpfnWndProc = WindowEventProc; KlasaOkna.lpszClassName = g_strKlasaOkna.c_str(); //tutaj wskazuje błąd <<<<<<<< KlasaOkna.hCursor = LoadCursor(NULL, IDC_ARROW); KlasaOkna.hIcon = LoadIcon(NULL, IDI_APPLICATION); KlasaOkna.hbrBackground = (HBRUSH) COLOR_WINDOW; RegisterClassEx (&KlasaOkna);
treść 1. błędu:

kod.cpp(46) : error C2440: '=' : cannot convert from 'const char *' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast


2. błąd tu:
HWND hOkno; hOkno = CreateWindowEx(NULL, g_strKlasaOkna.c_str(), "okno", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); //tutaj dokładnie <<<<<<<
treść:

kod.cpp(66) : error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'const char *' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast


Pracuję w środowisku microsoft visual studio 2005

Wie ktoś co zrobić żeby mogło przekonwertować te typy?
pozdrawiam
Ka-lolek



sprobuj:
reinterpret_cast<LPCWSTR>(g_strKlasaOkna.c_str());
ogolnie:
reinterpret_cast<typ>(zmienna)

...

tak wogole to typ zmiennej co przekazujesz do tych funkcji to wskaznik do 'wide char'...
aha, jakiego typu jest g_strKlasaOkna?

Działa tak, jak by chciał używać unicode, nie ma tam jakiejś opcji przy tworzeniu projektu?
/nie mam vs

@JsD g_strKlasaOkna to string :P




@JsD g_strKlasaOkna to string :P

heh... wiem - ale chcialem sie dowiedziec z jakiej biblioteki?

moze sprobuj cos takiego (z pamieci - nie gwarantuje poprawnosci)

int MultiByteToWideChar(
UINT ,
DWORD flagi,
LPCSTR ptr_do_stringu,
int dlugosc_stringu,
LPWSTR ptt_do_wide_string,
int dlugosc_wide
);

funkcja zwraca dlugosc strringu.
moze jakis przyklad wymysle...:

string str="costam";
LPWSTR wide_str=new WCHAR[str.lenght()];
MultiByteToWideChar(CP_ACP,0,str.c_str(),str.lenght(),wide_str,str.lenght());
// i dalej
KlasaOkna.lpszClassName=wide_str;

w tym drugim przypadku nie powinien wyskakiwac blad w tym miejscu co zaznaczyles, bo to chyba wskaznik do ikonki... chyba blad jest kilka linijek wyzej (3 i 4 argument), moze kompilator sie myli... nie pracuje na produktach MS...

wiec tak, albo wylacz w opcjach unicode (opcje projektu -> configuration properties -> general -> i tam zmien character set na Use Multi-Byte Character Set) albo korzystaj z std::wstring a nie std::string ( tylko w tym przypadku, jezeli przypisujesz tekst do zminnej musisz uzyc L przed "" , np wstring a = L"tekst")
Użytkownik icek edytował ten post 12 grudzień 2006, 00:29
@icek
Twój sposób działa :)
wielkie dzięki
możesz mi tylko powiedzieć, co to dokładnie zmienia ten Multi-Byte Character Set?
pozdrawiam i jeszcze raz dziękuję
Ka-lolek

albo inna metoda to robisz tak
TEXT(tutaj zapodajesz tekst) - TEXT to takie makro VS'a
TEXT(string.c_str()) - powinno działać


@icek
Twój sposób działa :)
wielkie dzięki
możesz mi tylko powiedzieć, co to dokładnie zmienia ten Multi-Byte Character Set?
pozdrawiam i jeszcze raz dziękuję
Ka-lolek
Wymuszenie używania standardu unicode w funkcjach winapi.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •