Skocz do zawartości

odczyt i zapis struktur w kontrolce


Mięki

Recommended Posts

Stworzylem kontrolke i mam problem z zapisywaniem i odczytywaniem struktury, w ktorej sa zapisywane ustawienia kontrolki.

typedef struct
{
    HINSTANCE  hInstance;
    HWND       hwndParent;     //uchwyt rodzica
    HMENU      id;             //id
    int        x;              //pozycja x
    int        y;              //pozycja y
    int        width;          //szerokosc
    int        height;         //wysokosc
    //reszta zmiennych...
} LBTN;

dane do struktury zapisuje sie

SetWindowLongPtrW(hwnd, 0, (LONG_PTR) &liteButton);

ale jak je teraz odczytac?? Kompilator wywala mi blad jesli sprobuje tak

liteButton = (LBTN) GetWindowLongPtrW(hwnd, 0);

Ktos wie jak to zrobic? Probowalem na pare roznych sposobow, ale jakos nie wychodzi... Tutaj zalaczam link do zrodel. Pisane w dev-cpp

Link do komentarza
Udostępnij na innych stronach

zmienne struktury zmieniam

liteButton->x = 10;

No to skoro jestesmy przy tym, to moze moglby mi ktos wytlumaczyc czym rozni sie struktura, np.

typedef struct {
    //tutaj jakies zmienne
} LBTN, lBtn;

jesli zdefiniujemy ja jako LBTN albo lBtn. I tak samo czym rozni sie '->' od '.'? Jako ze wczesniej programowalem w vb to jestem przyzwyczajony do kropki, ale w c++ to widzocznie jakas roznica jest.

Link do komentarza
Udostępnij na innych stronach

to przypisanie jest prawidlowe pod warunkiem ze liteButton zadeklarowales tak: LBTN* liteButton.

Zazwyczaj robi sie ze do struktury definiuje sie typ normalny i wskaznikowy i wyglada to tak:

typedef struct {
    //tutaj jakies zmienne
} LBTN, *PBTN;

A co do reszty twoich pytan to proponuje poszukac jakiejs dobrek ksiazki lub strony. ja nie mam zamiaru rozwodzic sie na temat skladni C/C++

Link do komentarza
Udostępnij na innych stronach

Sprawa jest prosta: jeśli operujesz na wskaźniku do struktury to do jej elementów odwołujesz się za pomocą ->...a kropa również występuje w c++ tylko, że za jej pomocą odnosisz się do elementu struktury, która jest zwykłym obiektem (ni wskaźnikiem). Co do LBTN, a lBtn no to tylko nazwa się zmienia chiba. Przed nazwą zmiennych (to tylko taka zasada) podaje się LP w celu zwrócenia uwagi na to, że jest wskaźnikiem. np w dokumentacji często zamiast gwiadki dodany jest przedrostek LP. Może coś pochrzaniłem...wiosna idzie!!!

pozdrawiam

Link do komentarza
Udostępnij na innych stronach

codeguy napisał:
...np w dokumentacji często zamiast gwiadki dodany jest przedrostek LP.

Nie "zamiast". Dodawanie przedrostka LP, to tylko taka konwencja w nazewnictwie struktur, mająca dać do zrozumienia programiście (nie kompilatorowi), że ma do czynienia z wskaźnikiem (LP od Long Pointer). Gwiazdka, natomiast, to samo "daje do zrozumienia" właśnie kompilatorowi.
Oto przykładowa, prosta struktura, którą znalazłem w MSDNie:

typedef struct _MENUBUTTONDATA {
    int idCommand;
    int x;
    int y;
} MENUBUTTONDATA, *LPMENUBUTTONDATA; 
Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...