Wie Typ eines CWnd herausbekommen
-
Servus
ich lass mir von einem Dialog mit GetWindow(GW_CHILD) bzw GW_HWNDNEXT alle Elemente zurückgeben.
Wie bekomme ich raus, ob mein aktuelles Element ein Button, SpinControl oder ähnliches ist?Viele Grüße,
Jöran
-
mit GetClassName und dann mittels Window Classes vergleichen
-
int GetClassName( HWND hWnd, LPTSTR lpClassName, int nMaxCount );
will als erstes element aber ein HWND und nimmt demzufolge nicht mein CWnd*:
CWnd* pw = m_tab1.GetWindow(GW_CHILD); while(pw) { CString helpme; GetClassName(pw, helpme, sizeof(helpme)); pw=pw->GetWindow(GW_HWNDNEXT); }
*cannot convert parameter 1 from 'CWnd ' to 'HWND'
-
HWND hWnd = pw->GetSafeHwnd();
-
Ok, super,
kurze Frage noch, der LPTSTR, den ich ihm da übergebe, wie initialisiere ich den?!
Bekomm permanent Errors, außer, wenn ich ihn so initialisiere:
LPTSTR* helpme = new LPTSTR; GetClassName(hw, *helpme, sizeof(helpme));
Dann laufen mir aber permanent Exceptions in der Form durch:
First-chance exception at 0x7e37f4c6 in TestReiter2.exe: 0xC0000005: Access violation writing location 0xcdcdcdcd.
First-chance exception at 0x7e37f4c6 in TestReiter2.exe: 0xC0000005: Access violation writing location 0xcdcdcdcd.
-
kein wunder...
alle LP*STR sind zeiger die man nur übergeben sollte. das LP steht für long pointer. du räumst dir da jetzt zwar speicher ein, aber der wird nur mit schrott gefüllt.char szHelpMe [64];
wenn du jetzt szHelpMe an GetClassName übergibst, zeigt der LPTSTR von GetClassName auf den speicherbereich von szHelpMe und kann ihn befüllen.