Autor Wątek: MinGW - Windres - polskie znaki  (Przeczytany 1017 razy)

Offline t4fun

  • Użytkownik

# Sierpień 24, 2010, 09:31:09
Postanowiłem przypomnieć sobie programowanie pod Windowsa, a ściślej pod WinAPI. Zainstalowałem sobie Netbeans + MinGW-TDM + MSYS. Wszytko ładnie dobrze działa, poza polskimi znakami w zasobach.
Jeżeli użyję polskich znaków bezpośrednio w kodzie, wszystko jest ok, ale jak dodałem sobie menu przez zasoby, to mam krzaczki. W Netbeans kodowanie projektu (źródeł) jest ustawione na UTF-8. W menu zamiast polskich liter ma 2 inne znaki, czyli widzę że system dostał UTF-8 a oczekiwał najprawdopodobniej cp-1250 ?
windres posiada parametry -c codepage i -l language ale nie wiem co mam tam podać aby się dobrze skompilowało

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

# Sierpień 24, 2010, 10:18:12
Cytuj
W menu zamiast polskich liter ma 2 inne znaki
W menu konsoli tak?

Sprawdz co ci da to :
printf("Z pliku %u=%s \n",z_pliku[0],z_pliku);
printf("Z zasobu %u=%s \n",z_zasobu[0],z_zasobu);
printf("---------------------------------------------- \n");
printf("Rozmiar z pliku %lu \n",sizeof(z_pliku[0]));
printf("Rozmiar z zasobu %lu \n",sizeof(z_zasobu[0]));
/* tu twoja funkcja wyświetlająca w winapi  */

Ja miałem o tyle trudniej, że musiałem zrobić wyświetlanie wszystkich języków w utf-8 w konsoli , dla linuxa i dla windowsa.
Ale udało mi się stworzyć własną bibliotekę nakładem sporej wielkości kodu i czasu(2 tygodnie). I niestety nie działa na domyślnej czcionce XP.(Trzeba ustawić lucida). Oczywiście jest opcja(wyłączona) z modyfikowaniem rejestru systemu, więc na XP prawidłowo wyświetla po drugim uruchomieniu .

Offline t4fun

  • Użytkownik

# Sierpień 24, 2010, 11:46:07
Nie nie chodzi o konsole a o okienka.
Gdy robię w kodzie np przycisk:

CreateWindowEx(0, _T("BUTTON"), _T("przycisk z ąęół"), WS_CHILD | WS_VISIBLE, 100, 100, 150, 30, hWnd, NULL, hInstance, NULL);
to jest ok, ale jak ładuję z zasobu menu i podpinam pod okienko:

HMENU hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(ID_MENU));
hWnd = CreateWindowEx(WS_EX_APPWINDOW, lpszClassName, lpszClassName, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, hMenu, hInstance, NULL);
Już nie ma polskich literek.

Ale problem rozwiązałem

plik rc wygląda mniej więcej tak:

1 24 "manifest.xml"

#include "ids.h"

#include "pl_pl.rc"
#include "en_en.rc"

a plik pl_pl.rc:

LANGUAGE LANG_POLISH, SUBLANG_POLISH_POLAND

ID_MENU MENU
{
   POPUP "&Plik"
      {
         MENUITEM "&Coś", ID_COS
         MENUITEM SEPARATOR
         MENUITEM "&Zakończ", ID_EXIT
      }
}

Plik pl_pl.rc edytuję w zewnętrznym edytorze z kodowaniem cp1250, a plik en_en.rc z kodowaniem ASCII

Problem mam teraz taki że nie wiem jak uruchomić exe z locale innym niż systemowe. Chcę tego żeby zobaczyć jak się zachowują różne tłumaczenia, pod Linuksem jest to banalne np: LC_ALL=de_DE ./foo