MFC ActiveX Control muss durch einmal klicken aktiviert werden
-
Guten Morgen,
ich weiss nicht ob ich hier im MFC Visual C++ Forum richtig bin.
Wenn nicht einfach verschieben.Also ich habe ein ActiveX Control geschrieben und werte im ActiveX Control
die pretranslate Message aus ( Mausposition ) um einen "Hover" Effekt zu
erzeugen. Funktioniert auch alles wunderbar. Das Problem ist nur, dass ich,
wenn ich das ActiveX Control in einem Projekt einfüge und dieses starte ersteinmal
auf den Button klicken muss, der den Hovereffekt bekommen soll und dann läuft das Control und der Hovereffekt funktioniert auch. Aber ich muss immer erst einmal draufklicken. Ich hätte aber gerne dass es gleich von Anfang an funktioniert.Würde mich freuen wenn ihr mir helfen könntet,
Gruss pmb
-
PreTranslateMessage kann nicht zuverlässig funktionieren. Schon gar nicht für ein ActiveX Control, wenn Du nicht eine spezielle eigene Implementierung gefunden hast...
Die MessageLoop für Dein Control liegt in der EXE und nicht in Deinem ActiveX...
Warum arbeitest Du nicht mit WM_MOUSEMOVE Nachrichten in Deinem Control um den Hoover Effekt zu erzeugen?Siehe auch:
http://blog.m-ri.de/index.php/2008/07/04/mfc-fenster-in-anderen-applikationen-verwenden/
und damit zusammen hängend:
http://blog.m-ri.de/index.php/2007/08/18/wann-message-reflection-nicht-funktioniert/
-
Ah ok dann werd ich mal nen anderen Weg einschlagen.
Mousemove ging nicht immer. Mal gings und mal ging es nicht.
k.A WarumDanke
-
Das Problem ist halt zusätzlich noch, dass ich noch Tooltips auf den Button haben will und da muss ich halt auch erstmal draufdrücken. Und da brauch ich die Pretranslate message
-
Dann schau in meinen Artikel und in den entsprechenden Knowledgebase Artikel der dort angegeben wird. Dort wird ein Hinweis für ActiveX Controls gegeben...
-
So ich habs jetzt realisiert mit RelayEvent,OnLBuutonDown,OnLButtonUp,MouseMove
Hier der Code:
void CTestToolBarCtrl::OnLButtonDown(UINT nFlags, CPoint point) { // pass this message to the ToolTip control RelayEvent(WM_LBUTTONDOWN, (WPARAM)nFlags, MAKELPARAM(LOWORD(point.x), LOWORD(point.y))); COleControl::OnLButtonDown(nFlags, point); }
void CTestToolBarCtrl::OnLButtonUp(UINT nFlags, CPoint point) { // pass this message to the ToolTip control RelayEvent(WM_LBUTTONUP, (WPARAM)nFlags, MAKELPARAM(LOWORD(point.x), LOWORD(point.y))); COleControl::OnLButtonUp(nFlags, point); }
void CTestToolBarCtrl::OnMouseMove(UINT nFlags, CPoint point) { // pass this message to the ToolTip control RelayEvent(WM_MOUSEMOVE, (WPARAM)nFlags, MAKELPARAM(LOWORD(point.x), LOWORD(point.y))); COleControl::OnMouseMove(nFlags, point); }
void CTestToolBarCtrl::RelayEvent(UINT message, WPARAM wParam, LPARAM lParam) { MessageBox("1"); // This function will create a MSG structure, fill it in a pass it to // the ToolTip control, m_ttip. Note that we ensure the point is in window // coordinates (relative to the control's window). if(NULL != m_pToolTip2.m_hWnd) { MessageBox("1"); MSG msg; msg.hwnd = m_hWnd; msg.message = message; msg.wParam = wParam; msg.lParam = lParam; msg.time = 0; msg.pt.x = LOWORD(lParam); msg.pt.y = HIWORD(lParam); m_pToolTip2.RelayEvent(&msg); } }
Es funktioniert jetzt auch wunderbar im TestContainer aber nicht wenn ich es in ein Projekt include. Im Testcontainer erscheinen die MessageBoxen und im Projekt dann nicht.
Gruss pmb