Tekst z okna dziecka do okna rodzica

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.

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

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.

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?

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.

0

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

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.

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.

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
0

Kurna, jak to okno wyświtlasz

0

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

Dzięki.
Pozdrawiam.

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