Tekst z okna dziecka do okna rodzica

Odpowiedz Nowy wątek
2007-04-24 12:59
makqus
0

Mam takie dziwny problem, i myślałem że funkcja GetParent() mi pomoże - a jednak nie.

W pliku zasobów mam zrobione okienka itp.
Mam okienko w którym mam buttona, i ten button otwiera okienko - czyli okienko dziecka z okienka rodzica.
I W tym nowo otwartym okienku dziecka, mam kontrolkę ListView, i zrobiłem obsługę zdarzenia - NM_DBLCLK na komórkę, i chciał bym wysłać zwrócony tekst z kliknietej komórki, do kontrolki Edit która jest w oknie rodzica.

Próbowałem na różne sposoby, i okno rodzica nie dostaje komunikatu.
Zrobiłem testowo if'a takiego:

case WM_NOTIFY:
if(GetParent(hWnd) != NULL)
    MessageBox(hWnd, "Okna ma rodzica", "I", MB_OK);
break;

I nie zwraca uchwytu - jest false. ;/

Proszę o pomoc.
Dzieki.

Pozostało 580 znaków

2007-04-24 13:31
0

Na Boga, przecież hWnd, to uchwyt do Twojego okna, które otrzymało komunikat... W WM_NOTIFY masz lParam jako ptr do NMHDR. Jak już to tak:
GetParent (((NMHDR*)lParam)->hwndFrom);
Ale na moje oko to Ty potrzebujesz tylko /po pobraniu teksu z ListView'a/
SetDlgItemText (hWnd, ID_EDITA, bufor);
Poczytaj dokładnie o callbackach okien bo coś mi się Twoja wiedza nie widzi...


I nie udawaj, że rozumiesz.

Pozostało 580 znaków

2007-04-24 14:19
makqus
0

Na Boga, przecież hWnd, to uchwyt do Twojego okna, które otrzymało komunikat.

Dokładnie :)

W WM_NOTIFY masz lParam jako ptr do NMHDR.

Tu też masz rację.

Ale na moje oko to Ty potrzebujesz tylko /po pobraniu teksu z ListView'a/

No to niestety Twoje okno, źle podpowiada ;)
Już tak próbowałem.

Zawaliłem, przyznaję - trochę zły przykład kodu dałem, cały case wygląda tak:

case WM_NOTIFY:
{
    switch( ((LPNMHDR)lParam)->code )
    {   
        case NM_DBLCLK:
            {
                int i = LV_GetItemSelected(hList); // wlasna funkcja zwraca aktualnie zaznaczona pozycje                        

                ListView_GetItemText(hList, i, 0, buff, sizeof(buff));
                SetDlgItemText(hWnd, IDC_NAZWA, buff);  // wysyła tekst z komórki do edita w oknie rodzica

                SetDlgItemText( hWnd , IDC_EDIT, buff); // według Ciebie powinno wysłac do okna rodzica - nie wysyla
            }
        break;
    }
}
break;

I i takiej sytuacji, uchwyt hWnd jest uchwytem do okna dziecka, a nie rodzica.

Poczytaj dokładnie o callbackach okien bo coś mi się Twoja wiedza nie widzi...

Zdziwił byś się :)
BTW: Człowiek wyuczony się nie rodzi. ;)

Pozdrawiam.

Pozostało 580 znaków

2007-04-24 14:27
0

Mam okienko w którym mam buttona, i ten button otwiera okienko - czyli okienko dziecka z okienka rodzica.
I W tym nowo otwartym okienku dziecka, mam kontrolkę ListView, i zrobiłem obsługę zdarzenia - NM_DBLCLK na komórkę, i chciał bym wysłać zwrócony tekst z kliknietej komórki, do kontrolki Edit która jest w oknie rodzica.
Ok, z tego by wynikało, że powinno być tak:


case WM_NOTIFY:
{
switch (((LPNMHDR)lParam)->code)
{       
case NM_DBLCLK:
{
int i = LV_GetItemSelected (hList);
HWND hParent = GetParent (hWnd);
        ListView_GetItemText (hList, i, 0, buff, sizeof(buff));
        SetDlgItemText (hParent, IDC_NAZWA, buff);

        SetDlgItemText (hParent, IDC_EDIT, buff);

        break;
    }
}
break;

}


A przy tworzeniu okna dałeś HWND hWndParent na HWND rodzica?

I nie udawaj, że rozumiesz.

Pozostało 580 znaków

2007-04-24 14:42
makqus
0

No właśnie tak robiłem na początku, ale jak już napisałem w pierwszym poście:

myślałem że funkcja GetParent() mi pomoże - a jednak nie.

GetParent() mi nie zwraca okna rodzica, i w tym cały problem.

Pozostało 580 znaków

2007-04-24 14:44
0

to daj cały kod programu bo z tego nic nie wynika...


I nie udawaj, że rozumiesz.

Pozostało 580 znaków

2007-04-24 14:50
makqus
0

Jak bym wkleił to by zapewne bazę zablokowało - kod trochę spory. ;)

Ale niestety, nie mogę.

Trudno, spróbuje jeszcze zrobić inaczej okno w .rc może style ma coś nie takie.

W każdym razie, dzięki za chęć pomocy.
Chyba, że coś Ci może przyjdzie jeszcze na myśl to napisz :)

Dzięki.
Pozdrawiam.

Pozostało 580 znaków

2007-04-24 14:52
0

Już wiem co zwaliłeś chyba - tworzysz okno, ale parenta może nie ustawiasz? Pochwal się jak tworzysz to okno z buttonem i ListView.


I nie udawaj, że rozumiesz.

Pozostało 580 znaków

2007-04-24 16:28
makqus
0

To jest styl okna głównego - czyli rodzica z buttonem co otwiera okno (ponizej):

STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_FIXEDSYS | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU

A to jest styl okna dziecka - tego z ListView:

STYLE DS_CENTER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU | WS_CHILD

Pozostało 580 znaków

2007-04-24 16:29
0

Kurna, jak to okno wyświtlasz


I nie udawaj, że rozumiesz.

Pozostało 580 znaków

2007-04-24 16:42
makqus
0

Ok wielkie dzięki za nakierowanie - problem rozwiązany. (:
Zapomniałem dodać do funkcji CreateDialog() 3 parametr. (:

Dzięki.
Pozdrawiam.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0