zeiger auf steuerelement
-
hi !
ich habe folgendes problem:
mein programm soll in einem anderen Programm eine ComboBox mit neuen werten füllen.
Den Handle und die ID auf die ComboBox des anderen Programms rauszukriegen war mit FindWindowEx und GetWindowLong nicht schwer, aber wie bekomme ich nun einen Zeiger auf das steuerelement, um es mit neuen werten zu aktualisieren ???
-
Ich schätze mal du meinst einen Zeiger auf ein CComboBox Objekt. Eigentlich brauchst du den ja nicht. Du kannst die Box ja genausogut über SendMessage und die richtigen Nachrichten füllen, sprich im WinAPI Style. CComboBox macht effektiv gesehen auch nichts anderes.
Eine möglichkeit wäre allerdings folgendes:
HWND hBox = ?; CComboBox Box; Box.Attach(hBox); // Jetzt ist Box mit der ComboBox verbunden und du kannst du ganz normalen Operationen benutzen Box.Detach();
-
Hey jackie!
Könntest du hier mal einen Beispielcode Posten?
Wäre super!MFG, Sigi
-
@GeorgeHomes
Danke für die Tips, muss ich gleich mal versuchen !@siggi:
HWND hwnd = ::FindWindow(NULL,"FremdesProgramm"); if(hwnd) { HWND hwnd2=::FindWindowEx(hwnd,NULL,"ComboBox",NULL); // über die klasse, da die combobox keinen windownamen hat. if(hwnd2) { int nID = GetWindowLong(hwnd2,GWL_ID); CComboBox* pBox = ((CComboBox*)GetDlgItem(nID)); } }
-
DANKE - HAT VOLL GEFUNZT !!!!!!!
-
DANKE jackie
Hab aber ein problem:
Ich krieg zwar die richtige ID aber sobald ich mit pBox etwas mache dann stürzt das Programm ab.Nochwas:
Hab mir die Adressen ausgeben lassen. Die Adresse vom der origional ComboBox ist anders als die vin pBox
-
So geht´s aber.
void CProgramm2Dlg::OnButton1() { HWND hwnd = ::FindWindow(NULL,"programm1"); if(hwnd) { HWND hwnd2=::FindWindowEx(hwnd,NULL,"ComboBox",NULL); // über die klasse, da die combobox keinen windownamen hat. if(hwnd2) { CComboBox Box; Box.Attach(hwnd2); Box.AddString("test"); Box.Detach(); } } }
Aber macht doch nix! Hauptsache es geht jetzt
Ist ein super Source
DANKE an alle beteiligten
-
Kein PRoblem. Aus WinAPI Faulheit, habe ich das auch mal so gelöst;)
-
ich möchte in meinem programm exakt das selbe prinzip verwenden, allerding um ein CTabCtrl zu steuern. Das problem ist, dass sich bei einem aufruf von GetItem() oder SetItem() das zielprogramm mit einer exception verabschiedet.
hat jemand eine idee warum das so ist?
-
CTabCtrl Tab; HWND hWindow; RECT rect; hWindow = ::FindWindowEx(hwnd, NULL, "SysTabControl32", NULL); if (hWindow) { Tab.Attach(hWindow); Tab.SetCurFocus(1); // klappt Tab.GetItemCount(); // klappt Tab.GetItemRect(1, &rect); // klappt nicht, crash der anderen applikation }
kann mir bitte jemand sagen warum das so ist??
bei combo boxen klappt es doch auch...