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

[c++] Problem z GetWindowText

Ostatnio zmodyfikowano 2016-04-08 13:19
Autor Wiadomość
Serafin
Temat założony przez niniejszego użytkownika
[c++] Problem z GetWindowText
» 2016-04-06 12:56:41
Witam!

Mam mały problem. Korzystam z książki AI Techniques For Game Programming. Została ona wydana chyba w 2001 roku. Wiem, że do dnia dzisiejszego dużo się pozmieniało i m.in. stąd mój problem. Korzystam z Microsoft Visual Studio 2013.

Na poczatku natknalem sie na problem z dwoma zmiennymi globalnymi
char* g_szApplicationName = "Bouncing Balls - with Dialog";
char*    g_szWindowClassName = "MyWindowClass";

zmienne char nie byly respektowane przez niektore funkcje, wiec je zmienilem na

LPCWSTR g_szApplicationName = TEXT ("Bouncing Balls - With Dialog");
LPCWSTR g_szWindowClassName = TEXT ("MyWindowClass");

i problem rozwiazalem.

teraz napotkalem problem z
 char  buffer[5];

zmienna buffer jest wykorzystywana w funkcji GetWindowText ktora ma postac:

GetWindowText (hwndRadius, buffer, 5);

wyskakuje mi blad:

argument of type "char *" is incompatible with parameter of type "LPWSTR"

i szczerze mowiac nie wiem jak ten problem rozwiazac, czy jest inna funkcja zamienna dla GetWindowText albo moze zmienna buffer powinna byc innego typu? Z gory dziekuje za pomoc.
P-147012
carlosmay
» 2016-04-06 14:26:25
C/C++
LPSTR buffer =( LPSTR ) GlobalAlloc( GPTR, 5 );
GetWindowTextA( hwndRadius, buffer, 5 );

Nie wiem jak, ale dopatrzyłem się tam 'A'
C/C++
LPTSTR buffer =( LPTSTR ) GlobalAlloc( GPTR, 5 * 2 );
GetWindowText( hwndRadius, buffer, 5 );
P-147017
j23
» 2016-04-06 18:46:21
LPCWSTR g_szApplicationName = TEXT ("Bouncing Balls - With Dialog");
LPCWSTR g_szWindowClassName = TEXT ("MyWindowClass");

i problem rozwiazalem.
Jeśli korzystasz z makra TEXT, zamiast LPCWSTR powinieneś użyć LPCTSTR.

LPTSTR buffer =( LPTSTR ) GlobalAlloc( GPTR, 5 * 2 );
Jeśli T jest nazwie typu, to:
LPTSTR buffer =( LPTSTR ) GlobalAlloc( GPTR, 5 * sizeof( TCHAR ) );


@Serafin, problem można rozwiązać na dwa sposoby. Albo przełączając w opcjach projektu Character Set na multibyte, albo - tak jak pokazał @carlosmay - dodając na koniec do (prawie) każdej nazwy funkcji WinAPI literę A.
P-147025
Serafin
Temat założony przez niniejszego użytkownika
» 2016-04-08 13:19:37
Dziekuje za odpowiedzi, jak znajde troche czasu to zobacze czy poskutkowalo.



Trochę to długo trwało, ale znalazłem czas na zabawę z C++. Jeszcze raz dziękuję. Działa. Dobrze, że są jeszcze ludzie, którzy chcą pomóc. Pozdrawiam :)
P-147075
« 1 »
  Strona 1 z 1