Barnaba
-
Postów
0 -
Dołączył
-
Ostatnio
Nigdy
Typ zawartości
Profile
Fora
Kalendarz
Articles
Pliki
Posty napisane przez Barnaba
-
-
Cześć. Mam problem.
Mianowicie chodzi mi o to, że utworzyłem sobie własnie własną klasę okna i nie wiem gdzie poszczególne kontrolki tej klasy mogą przechowywać dane. Na stronce jest opis tworzenia własnych klas, i tam zapamiętywane są dwie zmienne za pomocą funkcji SetWindowLong.
Pobiera się je tak:LONG data = GetWindowLong(hWnd,GWL_USERDATA);
WORD zmienna1 = LOWORD(data);
WORD zmienna2 = HIWORD(data);a zapisuje tak:
SetWindowLong(hWnd,GWL_USERDATA,MAKELONG(zmienna1,zmienna2));I wszyskto pięknie, ale co w przypadku gdy kontrolka ma do zapamiętania więcej niż dwie zmienne? Zmienne których używam to 5 zmiennych typu WORD tak więc tylko 2 z nich można wpakować do młodszego i starszego słowa zmiennej z którą odpowiada GWL_USERDATA.
Proszę o szybką pomoc. Z góry dzięki.
-
Cześć wszystkim.
Mam pewne pytania.
Jak (korzystając z WinAPI) można uzyskać ścieżkę do pliku (bez nazwy pliku czyli np. "c:\windows\") znając ścieżkę wraz z nazwą pliku (np. "c:\windows\win.ini").I jeszcze druga sprawa. Jak uzyskać ścieżkę do programu (tego który piszę).
Za mało miejsca w danych kontrolki
w C
Napisano
Dobra, już zrobiłem.
Cała sztuka to odpowiednio zainicjalizować (a nie zainicjować jak to większość ludzi pisze :D ) odpowiednio pole struktry WNDCLASS.cbWndExtra, które określa ilość dodatkowaej pamiętci dla każdej kontrolki tej klasy. I tak, jak ja potrzebowałem 3 zmiennych 16 biotwych czyli 2 bajtowych to wpisałem wartość 6 (w bajtach się podaje). Do tej pamięci dane zapisuje się unkcją SetWindowWord (jeżeli chcemy wartości 16 bitowe zapisać) lub SetWindowLong (32 biotwe).Funkcje wymagają podania indexu, a jest to nic innego jak numer bajta od którego należy zacząc zapisywać. I tak jeżeli chcemy zapisać wartość 32 bitową do tej pamięci to podajamy 0 (do 3 będzie zapisywał), 4 (do 7), 8 (do 11) i tak dalej. Oczywiście jeżeli zapisujemy liczbe 16 bitową wówczas mamy, 0 (do 1), 2 (do 3) i tak dalej. Wartości również pobiera się bardzo łatwo. Zapodam teraz jakiś przykład, bo chyba strasznie zamotałem ;).
gdzieś tam przy tworzeniu klasy przypisujemy do cbWndExtra wartość 8 co wystarczy nam na 2 liczby 16 bitowe i jedną 32 bitową.
...
wc.cbWndExtra = 8
..
POBIERANIE WARTOŚCI:
WORD zmienna1 = GetWindowWord(hWnd,0); // 0 - 1 bajty
DWORD zmienna2 = GetWindowLong(hWnd,2); // 2 - 5 bajty
WORD zmienna3 = GetWindowWord(hWnd,6); // 6 - 7 bajty
PRZYPISYWANIE:
SetWindowWord(hWnd,0,zmienna1);
SetWindowLong(hWnd,2,zmienna2);
SetWindowWord(hWnd,6,zmienna3);