MFC ActiveX Control - Brauche dringend Hilfe
-
Hallo Leute!!!
Ich spezifizier mal eben die Ausgangssituation.
Also, ich habe ein ActiveX Control basierend auf CDialog erstellt.Die Anwendung wo das Control laufen wird, sieht wie folgt aus:
Application, enthält MDIClient laut Spy++
Darin laufen 2 Child Windows, ein Workspace Window
und ein Window, in dem sich 3 Buttons befinden und mein ActiveX Control gehostet wird.
Ich habe es geschafft in meiner CMyControlCtrl zu implementieren, dass die 3 Buttons, die sich ein "Ebene/Window" höher befinden, mittels GetParent() und dann EnumChildWindows (durch Angabe der Buttontexte) diese zu schließen durch ein PostMessage(hWnd,WM_CLOSE,0,0):Also so gut soweit, die Buttons sind weg, quasi die Buttons die nicht zu meinem Control gehören.
Nun will ich an der Stelle, wo eins diese Buttons waren, einen eigenen Button definieren...Wenn ich CButton *pButton; pButton = new CButton();
pButton->Create(...) mache, wird dieser auch außerhalb meines ActiveXControls in dem Fenester eine Ebene höher angezeigt.Nun will ich aber auch ne Messagemap für das "höhere" Window definieren oder so, sprich ich will dass der Button beim Anklicken reagiert.
Wie gesagt, er befindet sich außerhalb des Control und gehört zu this->GetParent() (aufgerufen in meiner CMyControlCtrl)...
Doch wie kann ich das machen, dass der Button durch anklicken etwas macht???
Ich brauche dringend Hilfe

Gruß
-
Wenn Du denn Button als eigene Klasse selbst geschrieben hast, dann kannst Du OnChildNotify überschreiben und den Klick auf den Button selbst abfangen. Du kannst aber auch das Parent subclassen und WM_COMMAND abfangen.
BTW: Child-Fenster schließt man nicht durch senden von WM_CLOSE sondern mit hilfe von DesroyWindow.
Ich gehe davon aus, dass Du nicht Source-Eigentümer der Anwendung bist, die Du manilpulieren willst.
Es könnte sein, dass die Anwendung es Dir nicht verzeiht, dass Du die alten Buttons zersörst. Besser ist es in so einem Fall die Buttons zu disablen und zu verstecken.
-
Funktioniert irgendwie nicht die 1. Variante
Habe in meiner CMyControlCtrl
pos = new CRect(500,280,600,290);
mButton.Create(L"Extern Öffnen", WS_CHILD | WS_VISIBLE,
pos, this->GetParent(), IDD_MYBUTTON);und in meiner MyButton.cpp
BOOL CMyButton::OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult){
if (message == WM_LBUTTONDOWN) {
MessageBox(L"Test",L"TEST",NULL);
}
return TRUE;
}Aber passiert nichts beim Anklicken???
Und wie geht das mit der Subclass Sache?
-
muss ich bei message map in meiner CButton abgeleiteten Klasse
irgendwas hinzufügen, dass das parent window die message weiterleitet?
-
Wie wäre es., wenn Du einfach mal die Doku lesen würdest.
Du bekommst nicht alle Nachrichten, sondern die Notifications (WM_COMMAND, WM_NOTIFY) und das ist genau, das was Du haben möchtest.
Wenn ein WM_COMMAND ankommt dann ist der Klick erfolgt.Dir sollte auch klar sein, dass bei einem Button ein WM_LBUTTONDOWN keinen Klick Event auslöst, sondern erst der WM_LBUTTONUP!

-
in der doku steht aber nix drinne, so dass es funktioniert.
http://msdn.microsoft.com/en-us/library/2k689yez(VS.80).aspx
wenn ich meine onChildnotify ohne irgend ne if abfrage mache und gleich ne msg box ausgebe, passiert auch nichts!!!