Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

String u Textout

[es] :: C/C++ programiranje :: String u Textout

[ Pregleda: 1760 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bobby63
Nis

Član broj: 11398
Poruke: 180
*.dynamic.sbb.rs.



Profil

icon String u Textout07.03.2010. u 00:16 - pre 172 meseci
Nikako ne mogu da uradim, pretpostavljam, uzasno prostu stvar.

Imam array stringova koje hocu da odstampam na ekranu u vise redova uz pomoc Outtext. Ali nikako ne mogu da provalim kako da element string arraya nateram da se pojavi u Textout
Ovo npr radi:
Code:
wchar_t TxtMessage[]=_T("Ready");
TextOut(hdc, 5, 5 + 15*i, TxtMessage, _tcslen(TxtMessage));

a meni bi trebalo nesto kao:
Code:
wstring  my_string = strMessage[i];
wchar_t TxtMessage[] = my_string.c_str();

TextOut(hdc, 5, 5 + 15*i, TxtMessage, _tcslen(TxtMessage));

sto daje gresku:
Code:
Error    1    error C2440: 'initializing' : cannot convert from 'const wchar_t *' to 'wchar_t []'

Mora da bude unicode.

Probao sam sve kombinacije koje sam izguglao ali dobijam samo razlicite greske, sto ce reci da nesto fundamentalno ne razumem.

Poz svima i unapred hvala
Hear all, trust nothing!
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: String u Textout07.03.2010. u 08:58 - pre 172 meseci
TxtMessage ti ne treba. Probaj TextOut(hdc, 5, 5 + 15*i, my_string.c_str(), my_string.size());

Inače, TxtMessage je trebalo da bude const wchar_t*, kakvog je i tipa funkcija wstring::c_str().
 
Odgovor na temu

bobby63
Nis

Član broj: 11398
Poruke: 180
*.dynamic.sbb.rs.



Profil

icon Re: String u Textout07.03.2010. u 12:57 - pre 172 meseci
Hvala puno, Imas od mene pivo i cokoladu :)

Oba predloga rade a meni sada treba samo ova jedna linije
Code:
TextOut(hdc, 5, 5 + 15*i, strMessage[i].c_str(), strMessage[i].size());

Hear all, trust nothing!
 
Odgovor na temu

bobby63
Nis

Član broj: 11398
Poruke: 180
*.dynamic.sbb.rs.



Profil

icon Re: String u Textout18.03.2010. u 13:52 - pre 171 meseci
Pozz svima.

Da ne postavljam novu temu.

Taman sam zavrsio program kada sam primetio da nemam nasa slova!
U medjuvrenu sam provalio da treba da koristim TextOutW.
Evo koda:
Code:
wstring test = L"šđčćž ŠĐČĆŽ";
TextOutW(hdc, 5, 5 + 15*i, test.c_str(), test.size());
a dobijam "||||| |||||"

U cemu gresim?

Unapred hvala.
Hear all, trust nothing!
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: String u Textout18.03.2010. u 14:39 - pre 171 meseci
"Pismo" koji se koristi u programskom jeziku C++ ne sadrži slova van ASCII područja, a umesto njih moraš da koristiš C escape sekvence. Probaj s ovom linijom:

wstring test = L"\x0161\x0111\x010D\x0107\x017E \x0160\x0110\x010C\x0106\x017D";
 
Odgovor na temu

bobby63
Nis

Član broj: 11398
Poruke: 180
*.dynamic.sbb.rs.



Profil

icon Re: String u Textout19.03.2010. u 11:03 - pre 171 meseci
Hvala na odgovoru mada moram da priznam da mi tek sada nista nije jasno :(

Na primer, ovo ne radi:
Code:
wstring test = L"\x0161\x0111\x010D\x0107\x017E \x0160\x0110\x010C\x0106\x017D"";
TextOutW(hdc, 5, 5 + 15*i, test.c_str(), test.size());
Izlaz je "||||| |||||"

Ali ako stavim ovako:
Code:
TextOutW(hdc, 5, 5 + 15*i, L" \x0161\x0111\x010D\x0107\x017E \x0160\x0110\x010C\x0106\x017D ", 18);
Onda je izlaz "|đčć| |ĐČĆ|".

Ako saljem neki text kontroli onda su nasi znaci OK ??????
Ovo npr. radi dobro, tj daje u tom dijalogu nase znake"
Code:
wstring Text;
Text = L"ŠĐČĆŽ šđčćž";
SetDlgItemText(hDlg, IDC_PORUKA, Text.c_str());


Voleo bih da mi je jasno, ali ne uspevam ovde da vidim neku logiku :(

Ostatak programa sam zavrsio i sve radi OK ali sam se potpuno zaglavio oko nasih znakova.
Hear all, trust nothing!
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: String u Textout19.03.2010. u 11:46 - pre 171 meseci
Meni je misterija zašto prvi i drugi slučaj daju različite rezultate. Debaguj program korak po korak u prvom slučaju, i kad dođeš do TextOutW pogledaj sadržaj teksta. Da li debager lepo ispisuje tekst?

Moguć razlog zašto ima razlike između drugog i trećeg slučaja je font. Pre nego što hoćeš da ispisuješ tekst u neki HDC moraš da postaviš font, i taj font mora da podržava slova koja hoćeš da ispišeš. Default font verovatno ne podržava sva naša slova.
 
Odgovor na temu

bobby63
Nis

Član broj: 11398
Poruke: 180
*.dynamic.sbb.rs.



Profil

icon Re: String u Textout19.03.2010. u 13:00 - pre 171 meseci
U debugeru je text super tj. svi nasi znaci su tu.

Problem je onda font.

Ovo mi je palo ranije na pamet ali nisam uzpeo da provalim niti da izguglam kako se setuje font za TextOut.
Skapirao sam kako se menja boja texta i pozadine.

Ali nemam predstavu kako da setujem neki unicode font za TextOut?

Aplikacija je Visual Studio 2008 c++ "win32 project" i sve ide preko winapi.


Hear all, trust nothing!
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: String u Textout19.03.2010. u 14:39 - pre 171 meseci
Preko SelectObject se postavlja font, a font se pravi recimo sa CreateFontIndirect. Imaš i mogućnost da pobrojiš sve fontove sa traženim karakteristikama sa EnumFontFamiliesEx. Shell font (ili sistemski font) se vodi pod imenom "MS Shell Dlg 2", ali ne znam kako sve to zajedno radi, pogledaj u MSDN-u.
 
Odgovor na temu

bobby63
Nis

Član broj: 11398
Poruke: 180
*.dynamic.sbb.rs.



Profil

icon Re: String u Textout19.03.2010. u 20:47 - pre 171 meseci
Probacu da nadjem nesto pa ako uspem postavljam ovde.

Slaba vajda os MSDN, ja barem nikad nisam nasao nista korisno tamo, ali pogledacu u svakom slucaju.

Hvala u svakom slucaju.
Hear all, trust nothing!
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.mbb.telenor.rs.



+395 Profil

icon Re: String u Textout19.03.2010. u 21:07 - pre 171 meseci
Code:


// Lucia Sans Unicode je unicode font . npr, mozes i ostale da pronadjes nije jedini 
//velicina je 14  

// uzasna LOGFONT struktura ..... 
LOGFONT LogFont ; 
HDC hDC = ::GetDC(NULL);
int nLogPixelsY = GetDeviceCaps(hDC, LOGPIXELSY);
::ReleaseDC( NULL, hDC );

LogFont.lfCharSet = DEFAULT_CHARSET ; 
LogFont.lfQuality = DEFAULT_QUALITY ; 
LogFont.lfClipPrecision = CLIP_DEFAULT_PRECIS ; 
LogFont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
LogFont.lfOutPrecision = OUT_DEFAULT_PRECIS ; 
LogFont.lfUnderline = FALSE ; 
LogFont.lfStrikeOut = FALSE ; 
LogFont.lfItalic = FALSE ; // ITALIC flag 
LogFont.lfWeight = FW_NORMAL ; //moze i FW_BOLD 
LogFont.lfOrientation = 0 ; 
LogFont.lfEscapement = 0 ; 
_tcsncpy (LogFont.lfFaceName,_T("Lucia Sans Unicode"), LF_FACESIZE);
LogFont.lfFaceName[LF_FACESIZE-1] = TEXT('\0');  // Ensure null termination
LogFont.lfHeight = 14 * nLogPixelsY / 72;; // 14 velicina fonta .. 
LogFont.lfWidth = 0; 

// kreiras font od LOGFONT strukture 
HFONT hFont =  ::CreateFontIndirect(&LogFont) ;  

// m_hWnd je handle od tvog prozora gde ispiusujes text  
hDC = ::GetDC(m_hWnd) ; 

//setujes font na device context i uzimas tekuci .. 
HFONT hOldFont = SelectObject (hDC , hFont) ; 

// inicijalizujes RECT za racunanje  okvira  texta 
RECT rc; SetRect (0,0,0,0) ; 

// racuna samo okvir texta . moze i bez ovoga ako unapred znas koliko text zauzima .
DrawText (hDC ,_T("Neki latinicni text") , -1 ,&rc,DT_CALCRECT) ;  

//ispisivanje left-align text pogledaj na msdnu ostale flagovce za poravnanje . 
DrawText (hDC,_T("Neki latinicni text") ,-1 .&rc, DT_LEFT ) ; 

// vracas stari selektovani font kad zavrsis sa ispisom texta 
SelectObject (hDC,hOldFont) ; 

//oslobadjanje device contexta 
ReleaseDC(m_hWnd,hDC) ; 


Viva lollapalooza
 
Odgovor na temu

bobby63
Nis

Član broj: 11398
Poruke: 180
*.dynamic.sbb.rs.



Profil

icon Re: String u Textout20.03.2010. u 19:58 - pre 171 meseci
Hvala na ovom kodu, nisam jos uspeo da ga napravim da radi ali cu poraditi na tome.

U kontrolama imam sve naše znakove "šđčćž ŠĐČĆŽ"

U TextOut sa escape codovima dobijam "|đčć| |ĐČĆ|" tj fale šŠ i ŽŽ

Kada upisujem nesto u fajl (binary) takodje dobijam "|đčć| |ĐČĆ|" tj fale šŠ i ŽŽ

Pretpostavljam da jos nešto treba da se setuje da dobijem sve naše znakove ???????????
Hear all, trust nothing!
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: String u Textout20.03.2010. u 20:28 - pre 171 meseci
I taj rezultat je misterija. Ranije fontovi nisu imali sva slova, pa je bilo situacija da se vide Š i Ž, ali da slova Č i Ć nema (slovo Đ je postojalo, ali đ je bilo neko uvrnuto). Ovo kod tebe je suprotna situacija. Ali mogli bismo da pođemo od problema sa fajlom. Kažeš da se problem javlja i kad upisuješ slova u fajl. Možda pogrešnim fontom prikazuješ slova koja su u fajlu. Promeni font u editoru.

Priloži ovde fajl u kome su pogrešna slova, pa da i mi to proverimo.
 
Odgovor na temu

bobby63
Nis

Član broj: 11398
Poruke: 180
*.dynamic.sbb.rs.



Profil

icon Re: String u Textout20.03.2010. u 21:27 - pre 171 meseci
Moja glupost nevidjena!

Fajlove sam gledao u listeru total commandera.

U notepadu nemam novi red ali imam sva slova a u wordpadu je sve ok.

U programu sam pre upisa dodao ono:
Code:
wchar_t BOM = 0xFEFF;
out.write((char *) &BOM,sizeof(wchar_t));

Evo fajla.

Hear all, trust nothing!
Prikačeni fajlovi
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: String u Textout20.03.2010. u 22:55 - pre 171 meseci
Fajl je u redu, UTF-16, to jest Unicode. Znači, verovatno je problem u fontu. Taj BOM (Byte Order Mark) je marker na početku fajla koji označava kog je Unicode formata fajl. Postoji samo 5 BOM-ova, za 5 tipova fajla: UTF-8, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE. U Windowsu se najčešće koriste UTF-8 i UTF-16LE (što je default UTF-16 za Windows).
 
Odgovor na temu

[es] :: C/C++ programiranje :: String u Textout

[ Pregleda: 1760 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.