Avatar billede mortvader Nybegynder
01. januar 2005 - 21:16 Der er 17 kommentarer og
1 løsning

Variabel string til DrawText

C++ newbien har endnu et spørgsmål :)

CHAR mytext[100];
RECT rt;

strcpy(mytext,"Heya");
GetWindowRect(hWnd, &rt);
DrawText(hdc, &mytext, -1, &rt,DT_SINGLELINE | DT_CENTER | DT_VCENTER);


I dette tilfælde siger compileren
cannot convert parameter 2 from 'char (*)[100]' to 'const unsigned short *'

-og andre trælse og (for mig) ubegribelige ting, når jeg prøver andre varianter.

Kan nogen hjælpe mig med at få DrawText til at virke med en variabel streng? :)

På forhånd tak!
Avatar billede arne_v Ekspert
01. januar 2005 - 21:19 #1
skal

DrawText(hdc, &mytext, -1, &rt,DT_SINGLELINE | DT_CENTER | DT_VCENTER);

ikke være

DrawText(hdc, mytext, -1, &rt,DT_SINGLELINE | DT_CENTER | DT_VCENTER);

altså uden & foran mytext i kaldet ?
Avatar billede mortvader Nybegynder
01. januar 2005 - 21:23 #2
Nej, den har jeg prøvet. :P
Så får jeg

cannot convert parameter 2 from 'char [100]' to 'const unsigned short *'

-men tak for forslaget.. :)
Avatar billede arne_v Ekspert
01. januar 2005 - 21:27 #3
Hvad så hvis du undlader den & men ændrer erklæringen fra CHAR til TCHAR ?
Avatar billede mortvader Nybegynder
01. januar 2005 - 21:30 #4
Så får jeg (udover mit tudefjæs :D):
cannot convert parameter 1 from 'unsigned short [100]' to 'char *'
Avatar billede arne_v Ekspert
01. januar 2005 - 21:32 #5
Ja men er det ikke i strcpy linien ??
Avatar billede mortvader Nybegynder
01. januar 2005 - 21:33 #6
Æh, måske skal jeg huske at tilføje at det er Embedded Visual C++ 4.0 jeg sidder med?
Avatar billede mortvader Nybegynder
01. januar 2005 - 21:34 #7
Jeg ændrede det til:

TCHAR mytext[100];
RECT rt;

strcpy(mytext,"Heya");
GetWindowRect(hWnd, &rt);
DrawText(hdc, mytext, -1, &rt,DT_SINGLELINE | DT_CENTER | DT_VCENTER);

-altså TCHAR i stedet for CHAR, og fjernede & tegnet.
Avatar billede arne_v Ekspert
01. januar 2005 - 21:35 #8
Og erstat så

strcpy(mytext,"Heya");

med

wcscpy(mytext,_T("Heya"));
Avatar billede mortvader Nybegynder
01. januar 2005 - 21:37 #9
JAAA! Fantastisk, det virker!
Lav et svar. Og hvis du kan, vil du så forklare hvad _T er for en fætter? Kan ikke finde den i hjælpen?!
Avatar billede arne_v Ekspert
01. januar 2005 - 21:40 #10
svar
Avatar billede mortvader Nybegynder
01. januar 2005 - 21:41 #11
Tak for hjælpen!
Avatar billede arne_v Ekspert
01. januar 2005 - 21:41 #12
ANSI        UNICODE
TCHAR          char        wchar_t (reelt en short)

_T("xxx") er en TCHAR konstant d.v.s. en char* i ANSI mode og en wchar_t i UNICODE mode.
Avatar billede arne_v Ekspert
01. januar 2005 - 21:42 #13
Iøvrigt burde der ikke bruges wcscpy men _tcscpy iden den bliver til strcpy i
ANSI mode og wcscpy i UNICODE mode.
Avatar billede mortvader Nybegynder
01. januar 2005 - 21:56 #14
æhh! okay! Tusind tak for hjælpen. Jeg må indrømme at jeg er stået lidt af på det med ANSI/UNICODE, men jeg vil prøve at lade som ingenting, indtil jeg får lidt mere styr på C++ i det hele taget :)
Avatar billede arne_v Ekspert
01. januar 2005 - 22:06 #15
Hvis du laver Windows programmering så er det svært at undgå.

En hurtig googling fandt:
  http://www.rpi.edu/~pudeyo/articles/unicode.html
Avatar billede mortvader Nybegynder
01. januar 2005 - 23:22 #16
Ah okay!
Nååh så faldt dén 10-øre :)

tak igen.

jeg takker snart over, så jeg må hellere bare gå i seng.
Avatar billede jpk Nybegynder
02. januar 2005 - 10:27 #17
Hvis jeg husker rigtig, er _T en MFC makro og eftersom du ikke ellers anvender MFC, bør du bruge TEXT makroen istedet.
Avatar billede arne_v Ekspert
02. januar 2005 - 10:59 #18
Petzold bruger TEXT men nævner _T og __T og siger at hvilken man vælger
afhænger af hvor kort koden skal være - det er godt nok for mig.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester