Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Message aus Fenster mit WS_POPUP Style verschicken

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.11.2005, 15:14 Uhr
mutche



Hallo,

ich habe da ein Problem was warscheinlich sehr einfach ist, aber leider komme ich nicht darauf wie ich es lösen kann.

Ich kann keine Message von meinem Popup-Window (also: cs.style = WS_POPUP) an meine View verschicken.


Erst mal etwas allgemeines zum Aufbau meines Programms, ich verwende Doc/View-Architektur in einer SDI.
In meine View erstelle ich in der onLButtonDown ein Popup-Window einer Klasse CUnlockedWnd (von CWnd abgeleitet) über die Create-Methode.
Der Window-Style von meinem Popup-Window ist, wie gesagt, WS_POPUP und muss dies auch sein damit ich es auch außerhalb des Bereichs des zugehörigen "Parents" benutzen kann.

Ich erledige auch den ganzen Kram (Define der Message, Messagemap usw.) um eine Message zu versenden. Dies tut mein Popup-Window auch einwandfrei, solange es eben KEIN WS_POPUP sondern eine WS_CHILD ist.

Folgenden Code benutze ich zum Senden der Nachricht:


C++:
GetParent()->SendMessage(WM_UNLOCKED_EXITBUTTON,0,0);



Sende ich mit WS_POPUP ein Message und schaue mit Spy++ nach, wird keine Message verschickt.

Sende ich mit WS_CHILD wird die versendete Nachricht in meiner View empfangen

Er scheint also mit WS_POPUP keinen gültigen Zeiger mehr auf die View (also seinen Parent) zu bekommen. Ich habe dann dann die folgende Seite zur Hilfe genommen:

www.codeguru.com/forum/showthread.php?t=281430

Laut dieser Tabelle man bei einer SDI einen Zeiger auf die View von beliebigen Punkten mit AfxGetMainWnd()->GetActiveView() bekommen.
Bei mir gibt es die Methode GetActiveView gar nicht, wenn ich den Pfeil bei AfxGetMainWnd fertig habe. Und da sollte sie dann ja ein Fensterle mit den möglichen Eingaben öffnen
Ist da was falsch oder mach ich was falsch?

Wie komme ich den sonst mit WS_POPUP an einen Pointer von meiner View.

Danke im Voraus.

Gruss Mutche

Dieser Post wurde am 30.11.2005 um 15:51 Uhr von mutche editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.11.2005, 23:46 Uhr
mmc20
puss in boots


hi,
probier mal "GetParentOwner()->SendMessage(...)"
falls das nicht funzt, zeig doch mal dein create
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.12.2005, 17:58 Uhr
mutche



Entschulding für die lange zeit bis zu meiner Antwort.

habe das mit der SendMessage inzwischen hinbekomen in dem ich jeder Klasse die eine Nachricht an die View sende den this-zeiger (natürlich gecastet auf Cwnd) mitgegeben habe.

Leider schaffe ich es immer noch nicht Funktionen aus der View die Public sind aufzurufen auf diese Art.

Hier aber trotzdem noch der Create von meinem Popup-Fenster:


C++:
CString unlockedWndReg;
    //register Afx Wnd
    //unlockedWndReg = "unlockedWnd";
    unlockedWndReg = AfxRegisterWndClass(    CS_VREDRAW | CS_HREDRAW ,
                                            ::LoadCursor(NULL,IDC_ARROW),
                                            (HBRUSH)::GetStockObject(BLACK_BRUSH),::LoadIcon(NULL,IDI_APPLICATION)
                                            );

    m_UnlockedWnd = new CUnlockedWnd();
    m_UnlockedWnd->SetParent((CWnd*)this);
    RECT rectDefault2 = {20,200,400,300};
    m_UnlockedWnd->Create(unlockedWndReg,"UnlockedWnd",WS_OVERLAPPEDWINDOW|WS_VISIBLE, rectDefault2,this,ID_UNLOCKED_WND);
    
    m_UnlockedWnd->ShowWindow(SW_SHOW);


Dieser Post wurde am 05.12.2005 um 18:06 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: