Skocz do zawartości

Barnaba

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Posty napisane przez Barnaba

  1. 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);

  2. 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.

  3. 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ę).

×
×
  • Utwórz nowe...