Control in WM_INITDIALOG nicht verfügbar [gelöst]
-
Hi,
ich erstelle mir einen Dialog mit
hwndDeviceSelectDlg = CreateDialog( g_hInst, MAKEINTRESOURCE(MAIN_DLG), 0, DeviceSelectProc);Ich Lande auch in der WM_INITDIALOG von der angegebenen WinProc Methode:
BOOL APIENTRY DeviceSelectProc(HWND hDlg, UINT msg, UINT wp, LONG lp) { switch (msg) { case WM_INITDIALOG: { InitDeviceSelectWindow(); break; } //...Der Dialog enthällt eine ListView die ich inder InitDEviceSelectWindow Methode auf meine Bedürfnisse anpassen will, nur leider scheint das Control in diesem Moment noch nicht zu geben, da "GetDlgItem" am Anfang der Methode kein gültiges Handle liefert.
Die Methode sieht folgendermaßen aus.
void InitDeviceSelectWindow(void) { hwndListView = GetDlgItem(hwndDeviceSelectDlg,IDC_LIST_ACCESSIBLE_DEVICES); if ( hwndListView ) { ListView_SetExtendedListViewStyle(hwndListView,LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES ); RECT rec; GetClientRect(hwndListView,&rec); DWORD dwWith = rec.right - rec.left; LVCOLUMN col; col.mask = LVCF_TEXT | LVCF_WIDTH; col.cx = dwWith/2; col.fmt = LVCFMT_LEFT; col.pszText = g_szListViewDeviceSelectHeadLine[0]; col.cchTextMax = MAX_PATH; ListView_InsertColumn(hwndListView,0,&col); col.pszText = g_szListViewDeviceSelectHeadLine[1]; ListView_InsertColumn(hwndListView,1,&col); } }Wie gesagt, GetDlgItem bringt kein gültiges Handle und somit wird mein Code übersprungen.
Kann mir jemand sagen was ich falsche mache?Gruß
Sascha
-
Hi _Sascha_,
ist hwndDeviceSelectDlg eine lokale Variable?
Hat hwndDeviceSelectDlg den gleichen Inhalt wie hDlg von DeviceSelectProc()?Das ist natürlich unabdingbare Voraussetzung fürs Gelingen.
Ansonsten:
Ich gehe davon aus, daß Du den Dialog mit einem Resourcen-Editor als Resource in Deine Applikation eingebunden hast. Ist es so?Und hat IDC_LIST_ACCESSIBLE_DEVICES einen sinnvollen Wert? D.h. keine doppelte Belegung/Verwendung sowohl des Symbolnamens als auch des Wertes? (in der resource.h überprüfen)
Martin
-
Ich glaub ich hab den Fehler soeben gefunden.
Es handelt sich hier um einen Komplettumbau von einem Programm.
Derjenige von dem ich es übernommen habe hat alle Handels in globalen Variablen gespeichert, so auch das Handle für diesen Dialog in hwndDeviceSelectDlg ...Für die, die es interessiert.
Früher war es so dass der Dialog erzeugt wurde und anschließend die Initialisierung nicht im Context der WinProc Methode gemacht wurde.
Zum Zeitpunkt der nachträglichen Initialisierung war diese Variable richtig gesetzt was jetzt, wie Mmacher richtig vermutet hat, im Context der WinProc nicht der fall war.Gruß
Sascha