Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Cmenu Problem

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
28.03.2003, 16:54 Uhr
~SnPrCrZ
Gast


Hi,
Ich habe in meiner Anwendung ein dynamisch erzeugtes Menü.
Bei einem bestimmten Menüpunkt öffnet sich ein Popupmenü, dessen Menüeinträge aus einer Datenbank ausgelesen wurden. Da sich Anzahl und
Bezeichnung der Menüpunkte in der Datenbank ändern können, haben alle die gleiche ID und somit auch die gleiche Ereignisfunktion.
Meine Frage:
Wie kann ich innerhalb der Ereignisfunktion die Beschriftung des Menüpunktes auslesen, von dem aus die Funtkion aufgerufen wurde?

mfg
Chris
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.03.2003, 17:18 Uhr
Christian
C/C++ Master
(Operator)


Hi!

Das kann man so besser und einfacher machen! ;-)
Du kannst für die Zuweisung der Behandlungsroutinen nicht ON_COMMAND sondern ON_COMMAND_RANGE verwenden, du kannst damit mehreren IDs die gleiche Behandlungsroutine zuweisen. Die Behandlungsroutine hat dann einen Parameter, der anzeigt, welche ID das Ereignis ausgelöst hat!

Grüße, Christian
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.03.2003, 10:02 Uhr
~SnPrCrZ
Gast


Da bei mir die Menüpunkte die selbe ID haben (aus oben beschriebenen Grund) hilft es mir nichts, wenn ich in der Behandlungsroutine nur die ID habe.

mfg
Chris
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.03.2003, 11:22 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo,

probiers mals so:


C++:
ON_COMMAND_RANGE(ID_WIZARD /* Erste ID */,ID_WIZARD+50 /* Letzte ID, Achtung schaun in ressource.h und setze die erste ID auf 50000 */, LoadWizard)

// ...

void CYourDlg::LoadWizard(void)
{
  for(int x = 0; x < 50; x++)
  {
    CString strName;
    strName.Format("Menüitem %d",x);
    Menu->InsertMenu(x,MF_BYPOSITION|MF_STRING, ID_WIZARD+x, strName);
  }
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.04.2003, 10:56 Uhr
~SnPrCrZ
Gast


Hi,
Hab die ON_COMMAND_RANGE per Hand eingetragen und bekomme beim Compilieren folgenden Fehler:

error C2440: 'static_cast' : 'void (__thiscall CTestDlg::* )(void)' kann nicht in 'void (__thiscall CCmdTarget::* )(UINT)' konvertiert werden


mfg
Chris
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.04.2003, 13:27 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo,
ist die deklaration der Memberfunktion in deiner Klasse


C++:
afx_msg void Memberfkt();



falls das afx_msg fehlt funktioniert es nicht...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
09.04.2003, 13:45 Uhr
~SnPrCrZ
Gast


Das afx_msg hilft auch nicht. Es liegt nur an der Zeile

Code:
ON_COMMAND_RANGE(ID_WIZARD, ID_WIZARD+50, LoadWizard)

wenn ich sie auskommentiere läuft das Programm.

mfg
Chris
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
09.04.2003, 13:58 Uhr
~SnPrCrZ
Gast


Problem gelöst. Meine Funktion hatte void stat UINT als Parameter.

Danke für eure Antworten.

cu
Chris
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
09.04.2003, 15:19 Uhr
~SnPrCrZ
Gast


Doch noch ein Problem:
Wie kann ich die Beschriftung eines Menüitems auslesen.
Habs schon folgendermasen versucht, aber bei GetMenuString bricht mein programm mit einem "Debug Assertion Failed!" ab:


Code:
UINT ID;
ID = 50000;
CString hilf;
CMenu Menu;
Menu.LoadMenu(ID);
Menu.GetMenuString(ID, hilf, MF_BYPOSITION);
AfxMessageBox(hilf);



mfg
Chris
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
09.04.2003, 15:51 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


musst statt MF_BYPOSITION MF_BYCOMMAND benutzen, wenn du vorne die ID als Command hast, und du darfst nicht LoadMEnu(ID) schreiben sondern z.b LoadMenu(IDR_MAINFRAME) oder wie auch immer deine Menüresource heisst!
--
class God : public ChuckNorris { };
 
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: