16. juni 2004 - 14:13Der er
19 kommentarer og 1 løsning
Dialog, skal sende en listbox streng fra en anden dialog.
Nu er den gal igen (jeg er en nød til det her men det er sjovt nok, og jeg har jo alle jer til at redde mig)
Jeg bruger Microsoft Visual c++ 6 forresten.
spørgsmålet/problemet er:
Jeg har min "main" dialog hvor der er en listbox
IDC_LIST (wooo vildt navn)
Anyways, jeg har så en popup dialog hvor man kan ændre nogle settings, når man så klikker SAVE, skal den skrive en streng til min listbox.
problemet er, min kode er delt ud, så min settings dialog ting er i en anden .cpp/.h file
EG:
i min main.cpp fil: [code] case ID_TOOLS_SETTINGS: { int ret = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DBSETTINGS), hdwnd, DBSettingsDlgProc); } break; [/code]
i min dbsetting.cpp fil: [code] BOOL CALLBACK DBSettingsDlgProc(HWND hdwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { case WM_INITDIALOG:
...............osvosvosv længere nede skal den skrive en streng til min listbox i min main dialog. } } [/code]
jeg har included min resource.h fil i begge filerne self.
Jeg ved det er noget med jeg skal lave en message map så den ved hvor min listbox er, men hvad jeg ikke er helt klar over er hvordan.
jeg har rooodet rundt på nettet some en sindsyg men syntes ikke rigtig jeg kan finde noget.
har tid stødt ind i de her problemer så 200 points til dem/de der kan give mig en eksempel (og et par links ville oxo være rart, men en eksempel er meget bedre).
hdwnd er jo en lokal variabel for WinMain funktionen, men jeg forstod på dig at du kaldte SendDlgItemMessage fra en "anden" dialog hvor der så ikke er adgang til hdwnd eller hvad..?
SendDlgItemMessage med LB_ADDSTRING skulle gerne returnere indexet for elementet der blev oprettet i listboksen. Altså 0 hvis det er første kald, 1 hvis det er næste osv.
og ja jeg sender det fra en popup dialog (ligesom settings in IE) f,eks klikker setting og save, og så skriver den saved blabla i IE's windue (bare et eksempel).
okay jeg er ikke lige med, kan være det er fordi jeg er en bitte smule træt, har gloet på den her problem sidste 14 timer xD
anyways, sover et par timer og ser om jeg ikke kan fikse det når jeg står op igen (kan du sige hvad du mener med min hdwnd ikke er samme som min main dialog ???)
Din CALLBACK funktion får et handle til et vindue som første parameter, fx: BOOL CALLBACK DialogFunc(HWND hdwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Det er et handle til det vindue (den dialog) callback'en fungerer for, altså i ovenstående tilfælde din settings dialog, IKKE dit main wnd!
Jeg ved godt du har kaldt dem samme navn, men det er IKKE samme HWND.
Altså, når du kalder: SendDlgItemMessage(hdwnd, IDC_LIST, LB_ADDSTRING, 0, (LPARAM)"Opened Database Settings Dialog.");
i din settings dialog, sendes en message til dialogen selv.
Du skal i stedet have fat i et handle (HWND) til main dialogen, du kan fx bruge en af disse metoder: - GetParent(hdwnd) i stedet for hdwnd direkte (check om den returnerer en gyldig værdi først!) - Gemme main dialogens handle i en global variabel og bruge den i SendDlgItemMessage-kaldet
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.