Skocz do zawartości

[c++,visual,win32api] dzielenie status-bara na czesci


r4dical

Recommended Posts

witam.

probuje uporac sie z kontrolka o nazwie status-bar. mam taki kod:

int StatusParts = 5;
long StatusPartsWidth1[] = {80,160,240,320, -1};

hwndStatus = CreateStatusWindow( WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | CCS_BOTTOM , " status: nie zalogowany", hwnd, 990 );

SendMessage(hwndStatus, SB_SETPARTS, StatusParts, StatusPartsWidth1[0] ) ;

powinienem otrzymac kontrolke podzielona na 5 czesci.
przy uruchomieniu projektu wywala sie od razu i dostaje komunikat:

Wyst¹pi³ problem z aplikacj¹ pusty.exe i zostanie ona zamkniêta. Przepraszamy za k³opoty.

kiedy nie wysylam komunikatu SendMessage mam poprostu niepodzielony pasek statusu. zawsze podobala mi sie ta kontrolka w Wordzie i niedawno doczytalem sie gdzies, ze wystarczy wyslac do niej komunikat, zeby ja podzielic a potem dodac teksty nie za pomoca SetWindowText tylko rowniez SendMessage z komunikatem SB_SETTEXT.

z tego co wiem to lParam z SendMessage chyba jest typu long a w opisie komunikatu dzielacego kontrolki pisze, ze lParam powienien byc (LPINT) czyli dlugi wsk. do int.
Kiedy tap probuje skonstruowac ta funkcje to przy kompilacji dostaje, ze kompilator nie potrafi przekonwertowac wskaznika do int na long. podaje zatem pierwsza wartosc z tabeli i jakos dziala ale jak pisalem program konczy sie zanim zacznie.
Normalnie zrobilbym to tak:
SendMessage(hwndStatus, SB_SETPARTS, StatusParts, &StatusPartsWidth1) ;
ale dostaje komunikat: cannot convert parameter 4 from 'long (*)[5]' to 'long'

Kto poradzi jak to powinienem zrobic?
Pozdrawiam
Mariusz

Link do komentarza
Udostępnij na innych stronach

Witam!

Ponieważ nie mam narazie zainstalowanego VC++ (piszę w MASM i Delphi) nie mgę Ci podać konkretnego, sprawdzonego przykładu ale zobacz to:

Tworzenie okna statusu:
https://webmasterszukapracy.webpark.pl/windows/statusbar/statusbar_01.htm
Inicjowanie okna statusu (to właśnie jest o podziale paska stanu na części):
https://webmasterszukapracy.webpark.pl/windows/statusbar/statusbar_02.htm

Pozdro

Link do komentarza
Udostępnij na innych stronach

Do Twojego kodu wkradł się mały błąd. W SendMessage zamiast wskaźnika na tablicę z rozmiarami części StatusBar'a podałeś po prostu jej pierwszy element. Poprawiony kod wygląda następująco (nie kompilowałem go, ale powinien działać):

int StatusParts = 5; 
int StatusPartsWidth1[] = {80,160,240,320, -1}; 

hwndStatus = CreateStatusWindow( WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | CCS_BOTTOM , " status: nie zalogowany", hwnd, 990 ); 

SendMessage(hwndStatus, SB_SETPARTS, (WPARAM) StatusParts, (LPARAM) StatusPartsWidth1 ) ; 

Ps. Starajcie się umieszczać kod na forum między odpowiednimi znacznikami: [ code ] ... [ /code ].

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