logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

winapi - jak zrobić wyskakujące okienka dialogowe

VPN 05 Maj 2007 11:15 2168 2
REKLAMA
  • #1 3850497
    VPN
    Poziom 9  
    Posty: 39
    Chcę zrobić coś takiego, żeby po kliknięciu w jakąś pozycję z listboxa wyskakiwało nowe okienko dialogowe (coś w stylu jak to jest w gg)..najpierw chciałem poćwiczyć na zasadzie klikania w przycisk w głównym okienku dialogowym..zrobiłem to na takie zasadzie:
    Okienka[li]=CreateWindow(okienka, "okno", WS_OVERLAPPEDWINDOW,0, 0, 50, 70,hWnd, NULL, hInst, NULL);
    li++;
    ShowWindow(Okienka[li], SW_SHOW);
    UpdateWindow(Okienka[li]);

    gdzie Okienka[] to jest tablica obiektów HWND...ale to nie działa..chciałem tak zrobić przez tablicę, żeby identyfikować te okna..żeby rozróżniać co w którym zostało zrobione, żeby z głównego okna można było coś przesłać do któregoś z tych potomnych (okien rozmów)..ale coś to nie działa..może jakiś inny pomysł?? i jeszcze jedno pytanko..jak zrobić funkcję obsługujące wiadomości w takich okienkach potomnych, bo też nie wiem tego :(
  • REKLAMA
  • Pomocny post
    #2 3851604
    krzychoocpp
    VIP Zasłużony dla elektroda
    Posty: 1866
    Pomógł: 387
    Ocena: 58
    Witam, a mówiłem żeby się nie męczyć z WinAPI :P No ale jak ktoś lubi hardcore i nieprzespane noce :)
    Rozwiązanie z tablicą to nie jest dobry pomysł. Kiedy zamkniesz jedno z otwartych okien, w tablicy zostanie HWND nieistniejącego okna. U Ciebie nie działa bo nawet jeśli funkcja CreateWindow wywoła się prawidłowo to zwiększasz li i ShowWindow dostaje inny HWND.

    Ja proponuję (piszesz to w końcu w C++) żeby każdy kontakt był obiektem. W ListView każdy element może przechować dowolną rzecz przez lparam. Ustaw lparam na wskażnik do obiektu z kontaktem. W klasie kontaktu przechowaj HWND. Kiedy nadejdzie potrzeba wysłania czegoś do okna kontaktu, będziesz wiedział czy je utworzyć czy nie.

    Każde okno również może przechowywać dowolną wartość, ustaw ją na wskaźnik do odpowiedniego obiektu funkcją "SetWindowLongPtrW" (GWLP_USERDATA). Wtedy w pętli wiadomości okna możesz użyć "GetWindowLongPtrW" i już masz ten wskaźnik :D Pętla wiadomości jest przypisywana do klasy okna i jest jedna funkcja dla wszystkich okien tej samej klasy.

    To tyle z moich pomysłów :)

    Pozdrawiam, Krzysztof.
  • #3 3855146
    etet
    Poziom 15  
    Posty: 335
    Pomógł: 5
    Ocena: 65
    VPN napisał:
    Chcę zrobić coś takiego, żeby po kliknięciu w jakąś pozycję z listboxa wyskakiwało nowe okienko dialogowe (coś w stylu jak to jest w gg)..najpierw chciałem poćwiczyć na zasadzie klikania w przycisk w głównym okienku dialogowym..zrobiłem to na takie zasadzie:
    Okienka[li]=CreateWindow(okienka, "okno", WS_OVERLAPPEDWINDOW,0, 0, 50, 70,hWnd, NULL, hInst, NULL);
    li++;
    ShowWindow(Okienka[li], SW_SHOW);
    UpdateWindow(Okienka[li]);



    Okienka[li++] = CreateWindow(okienka, "okno", WS_OVERLAPPEDWINDOW | WS_VISIBLE,0, 0, 50, 70,hWnd, NULL, hInst, NULL);
    li++;


    Tworzy okno i od razu je pokazuje.

    Ale jak juz ktos napisal ta tablica to nie najlepszy pomysl.

    VPN napisał:

    jakiś inny pomysł?? i jeszcze jedno pytanko..jak zrobić funkcję obsługujące wiadomości w takich okienkach potomnych, bo też nie wiem tego :(


    Chyba rzuciles sie na zbyt glebokie wody. Poucz sie podstaw winapi to ci sie chyba wszystko rozjasni.
REKLAMA