Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Integration eines Kontextmenüs in eineer MDI-Anwendung

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 < [ 2 ]
000
27.07.2004, 10:43 Uhr
~Dirk
Gast


Hi,

in einer SDI-Anwendung konnte ich mit folgendem Code ein Kontextmenü(IDR_MENU) an das bestehende Menü anhängen.


Code:
/* Mainfrm.h */
CMenu m_Menu;

/* in einer Methode der Mainfrm.cpp */
CMenu* pMenuBar = GetMenu();
m_Menu.LoadMenu(IDR_MENU);
pMenuBar->InsertMenu(100,MF_BYPOSITION|MF_POPUP, (UINT)m_Menu.m_hMenu,"Zusatzmenü");



Bei einer MDI-Anwendung klappt es leider nicht. Was muss ich dort beachten?

Vielen Dank schonmal

Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.07.2004, 11:29 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


evtl musst du mit GetParent() oder GetParentFrame() erst das fenster für das menü holen


C++:
CMenu* pMenuBar = GetParent()->GetMenu();
// oder
CMenu* pMenuBar = GetParentFrame()->GetMenu();



--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.07.2004, 09:18 Uhr
~Dirk
Gast


Erstmal Danke für die Hilfe. In der MainFrame klappt es jetzt auch. Aber mein eigentliches Ziel konnte ich noch nicht verwirklichen. In einer MDI-Anwndung kann es ja mehrere Menüs geben. Es gibt z.B. ein Menü, welches man nur sieht, wenn kein Child-Window offen ist. Und dann kann ja jede View, die zu einem Child-Window gehört, noch ein eigenes Menü haben.
Mein Ziel ist es, das Kontextmenü in das Menü, welches zum ChildWindow gehört und eine View enthält zu integrieren. Bis jetzt probiere ich das in der OnInitialUpdate-Methode der MDIView-Klasse. Leider gibt es nur Assertions.

Wie muss ich vorgehen?

Danke schonmal

Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.07.2004, 10:14 Uhr
~mike
Gast


Hi!
Also wenn du mehere MDI Views hast würde ich einfach für jeden View ein MultiDocTemplate erstellen und dem ein Menü zuweisen. Das schaut dann z.B. so aus: http://mike.dev-geeks.org/screen.gif 3 Fenster mit 3 verschiedenen Menüs und Views.

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.07.2004, 10:51 Uhr
~Dirk
Gast


Danke, aber mein Problem ist ein anderes. Dies ist bereits in der Applikation realisiert. Sie hat unterschiedliche Views, die unterschiedliche Menüs hat. Und an ein bestehendes Menü einer View möchte ich noch ein Kontextmenü anhängen, welches sich in einer DLL befindet. Nur das mit der DLL lasse ich jetzt erstmal weg. Ich will es jetzt erst einmal schaffen, ein kleines Kontextmenü namens IDR_MENU1 während der Laufzeit an ein bestehendes Menü einer bestimmten View anzuhängen. Leider komme ich an den Zeiger des Menüs nicht ran.
Innerhalb der OnInitialUpdate-Methode der View an dessen Menü ich mein kleines Kontextmenü anhängen möchte, habe ich folgenden Code versucht:


Code:
CMenu* pMenuBar = GetMenu();
m_Menu.LoadMenu(IDR_MENU);
pMenuBar->InsertMenu(100,MF_BYPOSITION|MF_POPUP, (UINT)m_Menu.m_hMenu,"Zusatzmenü");
DrawMenuBar();



Was mache ich falsch?

Vielen Dank schonmal

Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.07.2004, 11:00 Uhr
~Dirk
Gast


Mit diesem Code klappt es nun schon etwas besser. Allerdings ist die OnInitialUpdate-Methode anscheinend zu früh. Denn, wenn ich den Code dort einbinde, passiert nichts. Rufe ich ihn später innerhalb der View auf, dann klappt es.


Code:
CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
    CMenu* pMenuBar = pFrame->GetMenu();
    m_Menu.LoadMenu(IDR_MENU1);
    pMenuBar->InsertMenu(100,MF_BYPOSITION|MF_POPUP, (UINT)m_Menu.m_hMenu,"Zusatzmenü");
    pFrame->DrawMenuBar();



Ich möchte, dass das kleine Kontextmenü direkt beim Starten der View angehängt wird. In welcher Methode der View muss ich das machen?

mfg

Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
28.07.2004, 17:05 Uhr
~mike
Gast


Probier mal WM_CREATE

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.07.2004, 19:02 Uhr
~Dirk
Gast


Hi Mike,

es klappt leider nicht. Wenn ich diesen Code in der OnCreate - Methode der View aufrufe, dann wird das Menü nicht an das Menü der View, sondern an das Menü, wenn keine View da ist angehängt. Dies liegt daran, dass zu diesem Zeitpunkt, das Menü der View noch nicht da ist, sondern noch das vorige Menü.

Was schlägst du vor? Oder kann ich vielleicht irgendwie bei Start der Applikation sagen, dass die beiden Menüressourcen zu einer zusammengeführt werden sollen?


Vielen Dank schonmal

Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
29.07.2004, 09:43 Uhr
~mike
Gast


Hi!
Könntest du eventl. einen Screenshot machen wo genau das Menü hin muss? Ich versteh es noch immer nicht ganz

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
29.07.2004, 10:17 Uhr
~Dirk
Gast


Hi,

ich habe einfach 2 Menüressourcen.



Menüressource 1

Datei
-----
Öffnen
Schliessen

Menüressource 2

Zusatzmenü
-----------
Test1
Test2

Jetzt möchte ich dauerhaft Menüressource 1 an Menüressource 2 binden. Das Ergebnis sollte also so sein:

Datei Zusatzmenü
----- -----------
Öffnen Test1
Schliessen Test2

Wie kann ich das machen?

Vielen Dank schonmal

Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: