GetDlgItem
-
Hi,
noch ne Frage..
Warum funktioniert GetDlgItem bei mir nur in den vom HauptDialog geöffnetten DialogBoxen und nicht auch direkt in meiner WndProc?switch(message) { case WM_CREATE: hInstance=((LPCREATESTRUCT)lParam)->hInstance; hFName=GetDlgItem(hwnd,IDC_FNAME); return 1; ...
hFName bekommt so immer den Wert NULL zugewiesen.
Vielleicht ne dumme Frage, aber warum geht das nicht?
mfg
Fred
-
ich bin mir nicht sicher, aber heißt es bei dialogen nicht WM_INITDIALOG anstatt WM_CREATE ??
-
WM_CREATE benutze ich immer für mein MainWnd und WM_INITDIALOG für die Dialoge die ich von dort aus starte.
WM_CREATE wird auch bei mir gleich aufgerufen aber es geht halt nicht mit GetDlgItem. Auch nicht wenn ich z.B. es durch was anderes als WM_CREATE aufrufe in meiner WndProc.mfg
Fred
-
Das geht nicht weil GetDlgItem vom DIALOGMANAGER behandelt wird, welcher nur bei CreateDialog() oder DialogBox() tätig/aufgerufen/bereitgestellt wird!
Deshalb heißt die Funktion GetDlgItem, weil es sich um ein DIALOG-Item handeln muß (= vom DialogManager verwaltet)!
-
Hmm, hatte ich mir schon fast gedacht, aber es müsste doch ne Möglichkeit geben den Handle auch in der WndProc zu bekommen.
Oder ist das komplett unmöglich?mfg
Fred
-
Fang in deiner Message-Loop IsDialogMessage ab. Damit könnte es eventuell gehen.
-
Original erstellt von Hepi:
**Das geht nicht weil GetDlgItem vom DIALOGMANAGER behandelt wird, welcher nur bei CreateDialog() oder DialogBox() tätig/aufgerufen/bereitgestellt wird!Deshalb heißt die Funktion GetDlgItem, weil es sich um ein DIALOG-Item handeln muß (= vom DialogManager verwaltet)!**
Nein!
You can use the GetDlgItem function with any parent-child window pair, not just with dialog boxes.
Hat also nichts mit IsDialogMessage oder dem DIALOGMANAGER zu tun.
-
OK, egal habe jetzt die Controls direkt erstellt im Source mit Handle etc. das andere ist zwar einfacher aber nun ja..
mfg
Fred
-
Du solltest dich mal Fragen ob der Dialog überhaupt schon besteht.
Wenn nein dann kannst du auch nicht auf Elemente darauf zugreifen