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

Gdi+

Ostatnio zmodyfikowano 2024-11-15 22:20
Autor Wiadomość
pekfos
» 2024-11-14 00:06:02
Kod źródłowy nie jest kodowany w UTF-8. Przeczytaj to co pisał DejaVu.
P-181912
KKR
Temat założony przez niniejszego użytkownika
» 2024-11-15 13:26:05
No właśnnie bo gdy w CodeBlocks przełączyć z Windows 1250 na UTF-8 to wszystko działa.
Tylk tym razem reszta API nie za bardzo.
W sieci znalazłem coś takiego:


#include <locale>
#include <codecvt>

std::string str = "ółśćż";
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>> converter;
std::wstring wstr = converter.from_bytes(str);

CB ustawiony na Windows 1250, nie zgłasza błędów ale nie konwertuje.
P-181915
pekfos
» 2024-11-15 18:03:15
Tylk tym razem reszta API nie za bardzo.
Co to ma znaczyć? Co nie działa. Podaj konkretny kod i konkretne objawy.
P-181916
KKR
Temat założony przez niniejszego użytkownika
» 2024-11-15 20:39:47
C/C++
//Zmienne globalne:
using namespace Gdiplus;
using namespace std;

//Dla UTF-8
Wstring Scierzka;

//Dla WINDOWS-1250
string Scierzka;

case WM_LBUTTONUP:
{
   
OPENFILENAME ofn;
   
   
//Dla UTF-8
   
wstring nazwapliku;
   
   
//Dla WINDOWS-1250
   
string nazwapliku;
   
   
   
ZeroMemory( & ofn, sizeof( ofn ) );
   
ofn.hwndOwner = Hwnd_Settings;
   
ofn.lStructSize = sizeof( ofn );
   
ofn.lpstrFilter = "Grafika (*.jpg)\0*.jpg\0*.bmp\0*.bmp\0*.gif\0*.gif\0*.png\0*.png\0*.tif\0*.tif\0";
   
ofn.nMaxFile = MAX_PATH;
   
ofn.lpstrFile = LPSTR( nazwapliku.c_str() );
   
ofn.lpstrTitle = "Pliki graficzne";
   
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
   
if( GetOpenFileName( & ofn ) )
   
{
       
//Dla UTF-8
       
Scierzka = LPWSTR( nazwapliku.c_str() );
       
       
//Dla WINDOWS-1250
       
Scierzka = LPSTR( nazwapliku.c_str() );
       
       
InvalidateRect( Hwnd_Explo, NULL, FALSE );
   
}
   
break;
}
case WM_PAINT:
{
   
HDC hdc;
   
PAINTSTRUCT ps;
   
hdc = BeginPaint( hwnd, & ps );
   
Graphics graphics( hdc );
   
   
   
//W ten sposób działa na UTF-8 plik może mieć polskie litery
    //Na WINDOWS-1250 doczepił się do polskich liter
   
Scierzka = L"D:/Pobrane/żółć.jpg";
   
Image image( Scierzka );
   
   
   
//A tak nie działa na UTF-8
    //Nie ma błędów ale też z okna pobierz plik nic nie pobierze.
   
Image image( Scierzka );
   
   
   
//Dla WINDOWS-1250 ze zmiennej  Scierzka przekazywane są wszystkie pliki
    //graficzne prócz tych z "ąśćł" itd.
   
const size_t len = Scierzka.length() + 1;
   
wchar_t wcstring[ len ];
   
swprintf( wcstring, len, L"%s", Scierzka.c_str() );
   
Image image( wcstring );
   
   
   
graphics.DrawImage( & image, 0, 0 );
   
EndPaint( hwnd, & ps );
   
break;
}
P-181917
pekfos
» 2024-11-15 21:01:43
Dodaj -DUNICODE do opcji kompilacji jak chcesz mieć wszystko w Unicode. Alternatywnie na początku kodu, przed wszystkimi include dodaj
C/C++
#define UNICODE
https://learn.microsoft.com/en-us/windows/win32/intl/conventions-for-function-prototypes

Na WINDOWS-1250 doczepił się do polskich liter
Kod źródłowy ma być w UTF-8. Kompilator domyślnie oczekuje że tak jest, więc dostarczając program w jednym z tysiąca nierozróżnialnych sposobów kodowania sam się prosisz o kłopoty.
C/C++
#include <Windows.h>

int main()
{
   
MessageBoxA( NULL, "C:\\my_żółć.png", "test", MB_OK );
}
Taki kod się kompiluje, ale w wygenerowanym programie napisy są dalej w UTF-8. Możesz powiedzieć kompilatorowi żeby kodował je inaczej, np opcją -fexec-charset=Windows-1250 i wtedy będzie też działać poprawnie.
P-181918
KKR
Temat założony przez niniejszego użytkownika
» 2024-11-15 22:20:48
Po wim tak, że od gdzieś 2001 roku pisze w VB6, prosty język i kiedyś niezły i o dużych możliwościach, niestety nie dziś.
Pare tygodni temu wziołem się za C++, szkoda że tak póżno.
Nigdy nie znałem C++.
Przepisałem sobie taką aplikację z VB6 na C++ taka nakładka na Windows do organizacji skrótów pulpitu.
Jak zauważyłem w C++ wiele żeczy trzeba robić ręcznie VB6 był wygodniejszy, no ale cóż.
Jak bym tak koledze przesłał cały kod, czy można liczyć na poprawę tego kodu żeby działało.?

/edit: adres e-mail usunięty by DejaVu - unikaj podawania swojego e-maila na forach w Internecie, bo boty z Internetu go zapiszą w swoich bazach danych i będziesz dostawał dużo spamu.
P-181919
1 « 2 »
Poprzednia strona Strona 2 z 2