Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI] Polskie znaki w oknie

Ostatnio zmodyfikowano 2012-12-22 00:22
Autor Wiadomość
McAffey
Temat założony przez niniejszego użytkownika
[WinAPI] Polskie znaki w oknie
» 2012-12-21 17:55:46
Witam.

Potrzebuję zrobić zwykłe okno winapi, które wyświetla podany tekst, ale generalnie słabo znam winapi i mam problem (i dość mało czasu, więc nie zdążę ogarnąć winapi, za jakiś czas zamierzam przerobić kurs, bo często odczuwam brak znajomości tej biblioteki, ale obecnie nie dam już rady czasowo ).

Tzn ogólnie okno zrobiłem, tekst się wyświetla, tylko bez polskich znaków (zamiast tego są krzaczki). Trochę wertuję google, ale nie potrafię sprostać.

Natrafiłem nawet na lekcję w kursie » Kurs WinAPI, C++ » ZaawansowaneUnicode w WinAPI lekcja, ale wciąż mi nie wychodzi.

Mógłby ktoś poradzić, co zrobić aby polskie znaki się wyświetlały ? Żeby np. po napisaniu czegoś takiego :

C/C++
hEdit = CreateWindowEx( WS_EX_CLIENTEDGE, WC_EDIT, "ąęć,
WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY |
WS_VSCROLL | WS_HSCROLL, 0, 0, 500, 500, hwnd, 0, * hInst, 0 );

na ekranie poprawnie wyświetliło się "ąęć".

Z góry dzięki wielkie za pomoc :)
P-71552
xevuel
» 2012-12-21 17:57:26
Wersja W funkcji i przedrostek L przy stringu :)

//edit:
Czyli najprawdopodobniej coś takiego:
C/C++
hEdit = CreateWindowExW( WS_EX_CLIENTEDGE, WC_EDIT, L"ąęć,
WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY |
WS_VSCROLL | WS_HSCROLL, 0, 0, 500, 500, hwnd, 0, * hInst, 0 );
P-71553
kubawal
» 2012-12-21 17:59:22
Czyli:
C/C++
hEdit = CreateWindowExW( /*...*/, L"ąść", /*...*/ );

Lub w VC++ 2010: Project->Properties->Configuration Properties->General->Character Set->Use Unicode Character Set.
P-71554
McAffey
Temat założony przez niniejszego użytkownika
» 2012-12-21 19:07:05
A jak to przedstawić jako WCHAR ?

Kod :

C/C++
hEdit = CreateWindowExW( WS_EX_CLIENTEDGE, WC_EDIT, L"ąęć",
WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY |
WS_VSCROLL | WS_HSCROLL, 0, 0, 500, 500, hwnd, 0, * hInst, 0 );

Błąd kompilacji :

error: cannot convert 'const char*' to 'const WCHAR*' for argument '2' to 'HWND__* CreateWindowExW(DWORD, const WCHAR*, const WCHAR*, DWORD, int, int, int, int, HWND__*, HMENU__*, HINSTANCE__*, void*)'|
P-71567
DejaVu
» 2012-12-21 19:08:32
WC_EDITW

C/C++
#define WC_EDITA              "Edit"    // ansi
#define WC_EDITW              L"Edit"   // wide

#ifdef UNICODE
#define WC_EDIT               WC_EDITW
#else
#define WC_EDIT               WC_EDITA
#endif
P-71568
kubawal
» 2012-12-21 19:09:44
Lub jako styl dać
L"EDIT"
P-71569
McAffey
Temat założony przez niniejszego użytkownika
» 2012-12-21 19:59:21
A jak zamiast tekstu w cudzysłwiu podać stringa ?

Bo gdy sobie przekonwertowałem stringa na wchar_t, to tekst się wyświetla, ale bez polskich znaków (które znów są krzakami). Konwertuję w ten sposób :

C/C++
wchar_t * zmienna_wchar = new wchar_t[ str.size() ];

for( string::size_type i = 0; i < str.size(); i++ )
     zmienna_wchar[ i ] = str[ i ];

//a potem
hEdit = CreateWindowExW( WS_EX_CLIENTEDGE, WC_EDITW, zmienna_wchar,
WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY |
WS_VSCROLL | WS_HSCROLL, 0, 0, 500, 500, hwnd, 0, * hInst, 0 );
P-71575
Elaine
» 2012-12-21 21:09:45
Jesteś pewien, że chcesz konwertować ISO-8859-1 do UTF-16? Ta pętla właśnie to robi.
P-71588
« 1 » 2
  Strona 1 z 2 Następna strona