Ĺ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
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.