Skocz do zawartości

odczyt i zapis struktur w kontrolce


Recommended Posts

Napisano

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

Napisano

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.

Napisano

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++

Napisano

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

Napisano
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; 

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