Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Winapi/C++ - Tworzenie okna potomnego, button na oknie rodzica

piotrusbor 21 Sty 2013 13:20 2352 10
  • #1 21 Sty 2013 13:20
    piotrusbor
    Poziom 11  

    Witam,
    Pytałem już o to na innym forum ale niestety nie uzyskałem satysfakcjonującej mnie odpowiedzi. Dodam że może być to ważne iż piszę programik w VS 2010 EXPRESS.
    Mój problem to utworzenie okna dziecka po naciśnięciu buttona w oknie rodzica. Znalazłem całą procedurę tworzenia i co najlepsze wszystko się ładnie kompiluje i działa jak powinno--> Link do postu tylko jest inaczej napisane co pewnie wiąże się z programem w którym było tworzone. Ja u siebie na VS 2010 Exp. mam taki kod, który został wygenerowany przez VS i powiększony nieco przeze mnie. Wygląda to tak:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    No i niestety ale nie działa jak powinno, a kompilator wywala błąd
    Cytat:
    noweOkno 0xcccccccc {unused=??? } HWND__ *

    Może wy mi pomożecie, wskażecie błąd ? Nie mam już siły, pomysłu na ten pewnie dość banalny błąd którego nie mogę odszukać......

    Proszę pamiętać o używaniu znaczników syntax. Opcja Listing kodu. Proszę to poprawić! - arnoldziq

    0 10
  • #3 22 Sty 2013 08:05
    piotrusbor
    Poziom 11  

    w linii 125:127

    case 1001:
    ShowWindow(noweOkno ,SW_SHOW);
    break;

    Wywala błąd
    noweOkno 0xcccccccc {unused=??? } HWND__ *
    unused CXX0030: Error: expression cannot be evaluated

    0
  • #4 23 Sty 2013 08:32
    Terminator
    Poziom 23  

    Piszesz

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    a czy zarejestrowałeś klasę szWindowClassChild ?
    Używasz MyRegisterClass(hInstance); dla klasy głównej okna a dla dziecka już nie ?
    Stwórz sobie funkcję
    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Po
    Kod: cpp
    Zaloguj się, aby zobaczyć kod
    wywołaj
    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Oczywiście dopasuj sobie wszystkie parametry (hIcon albo lpszClassName jeśli pracujesz w unicode, hInst to instancja całej aplikacji - u mnie globalna zmienna)

    Dla noweOkno=Create(...) dodaj WS_CHILD jak to ma być dziecko.

    0
  • #5 23 Sty 2013 08:56
    piotrusbor
    Poziom 11  

    Bardzo dziękuję za odpowiedz.
    Zrobiłem jak piszesz i przy wywołaniu po:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    niestety wywala błąd:
    Cytat:
    'MyRegisterClass' : function does not take 2 arguments

    0
  • #6 23 Sty 2013 13:49
    Terminator
    Poziom 23  

    Bo musisz wkleić kod mojej funkcji MyRegisterClass ale pozostawiając tą co Ty masz także.To tzw. przeładowanie funkcji - czyli będą dwie funkcje o tej samej nazwie ale z innymi parametrami. Gdy wywołasz ją z jednym parametrem HINSTANCe to uruchomi się Twoja MyRegisterClass a jak z dwoma parametrami to moja.

    0
  • #7 23 Sty 2013 13:55
    piotrusbor
    Poziom 11  

    Wkleiłem właśnie:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #8 23 Sty 2013 17:11
    Terminator
    Poziom 23  

    W funkcji _tWinMain wywołujesz funkcję MyRegisterClass(WndProcChild,szWindowClassChild); , niestety ale kompilator nie ma pojęcia o tym że taka funkcja istnieje bo jej ciało znajduje się niżej. Musisz dodać deklaracje chociaż tej funkcji

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    albo przenieść ciało funkcji powyżej funkcji _tWinMain.

    0
  • #9 23 Sty 2013 18:43
    piotrusbor
    Poziom 11  

    Dodałem jak kazałeś, teraz inny błąd;/

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Dlaczego to jest takie ciężkie ? Czy nie można języków programowania zrobić na zasadzie klocków lego ? Dokładasz część, i kolejną i powstaje dom ?

    .......
    Dobra: mam coś takiego:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Wszystko jest niby OK, ale niestety, wyświetla mi się w oknie dziecka to samo co w oknie rodzica, a okno dziecka ma byc puste ...(NOWE)

    0
  • Pomocny post
    #10 24 Sty 2013 08:38
    Terminator
    Poziom 23  

    Chyba nie ogarniasz tworzenia nowego okna ;]
    Dodałeś deklarację na początku pliku - ok.
    Dodałeś rejestrację klasy MyRegisterClass - ok.
    Powiedz mi dlaczego w WndProc masz

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    //edit
    dlatego to samo bo
    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    a IDC_JJJ mają taką samą nazwę - chodzi o to że to nie zmienna ma być inna a nazwa która jest w tej zmiennej :)
    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #11 24 Sty 2013 13:20
    piotrusbor
    Poziom 11  

    Ok juz lukam...... na to co powyżej z edita ;]

    No właśnie nie ogarniam ;/ EEhhh szkoda słów.
    Mój kod własnie źle wkleiłem, sam się złapałem na tym błędzie odnosnie szWindowClass.
    Zamieniłem i dodałem ShowWindow(hRysuj,SW_SHOW); ShowWindow(noweOkno,SW_SHOW);
    Niestety dalej wyswietla się to samo w oknie dziecka i rodzica .....

    Dodano po 50 [minuty]:

    OK, ciąg dalszy mojego problemu, pozamieniałem wszystko, dodałem:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    w pliku Resource.h mam teraz tak:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Przy takim układzie wszystkiego niestety nic się nie pokazuje po kliknięciu.
    Jak zamienie:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    na IDC_JJJ w ramach testu to sie wyświetla ale to samo w oknie dziecka jest button inaczej nic się nie dzieje Panie Damianie :)
    :cry: :cry: :cry:

    Dodano po 3 [godziny] 43 [minuty]:

    Terminator super GOŚCIU, pomógł przez PW.
    Pełen szacunek dla tej osoby.
    Pozdrawiam

    0