EingabeBox im Menü



  • Hallo zumsammen,

    gibt es eine Möglichkeit eine Eingabebox ins Menü zu integrieren?

    Ich hab eine Anwendung die nur im Tray läuft. Beim Rechtsklick
    erscheint ein Menü. Das klappt soweit ganz gut.
    Kann ich in dieses Menü eine Eingabebox reinbekommen?

    Hier ein Beispiel eines meiner Menüeinträge. Wie kann ich
    hier ein Eingabefeld anstatt dem Text "exit" reinbekommen?

    mii.fMask = MIIM_TYPE | MIIM_ID;
    mii.fType = MFT_STRING;
    lstrcpy (string, "exit");
    mii.dwTypeData = string;
    mii.cch = lstrlen (string);
    mii.wID = IDM_EXIT;
    InsertMenuItem (hpopup, IDM_EXIT, TRUE,  &mii);
    

    Gruß
    Robby



  • Ich denke fast, dass du dann das ganze Popup selber basteln muss (also als normales Fenster) - kann aber auch sein, dass es auch anders irgendwie geht 😉



  • Das klingt nicht gut 🙂

    Oder hat jemand eine andere schicke Idee zu folgendem Problem:
    Ich hab eine Anwendung in der System Tray mit einem Menü. Wie kann ich schnellstmöglich eine Telefonnummer eingeben und das Ergebnis Ausgeben?

    Ich wollte eigentlich keinen Extra Dialog aufpoppen für die Suche...



  • mal eine andere Frage dazu:

    ich mache einen neuen Menüeintrag z.B.:
    InsertMenuItem (hpopup, 1, FALSE, &mii);

    mit
    mii.fState = MFS_HILITE;

    kann ich den Eintrag beim Erstellen auch Highliten.

    Wie kann ich den aber im laufenden Betrieb Highlighten???
    Mit HiliteMenuItem funktioniert das nicht so ganz oder ich blicks nicht...

    aus MSDN:
    BOOL HiliteMenuItem( HWND hwnd,
    HMENU hmenu,
    UINT uItemHilite,
    UINT uHilite
    );

    aber mit HiliteMenuItem(hwnd,hpopup,1,MF_HILITE);

    geht es nicht??? jemand eine Idee?



  • du musst bei MF_HILITE noch MF_BYCOMMAND oder MF_BYPOSITION mit angeben, also dann so:

    HiliteMenuItem(hwnd,hpopup,1,MF_BYPOSITION|MF_HILITE);
    


  • das hab ich auch schon versucht...funktioniert aber auch nicht!
    Eine Idee?



  • ich hab jetzt mal eine Editbox erstellt und ins menü versucht einzubinden.
    Nur zeigt er mir einfach nix an im Menü. Hat da jemand eine Idee?

    Oder ein Beispiel wo es schon tut? 🙂

    HWND MeinControl = CreateWindow("EDIT","",
                             			WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL,
                             			1,1,50,20,
                             			hwnd,
                             			hpopup,
                             			(HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),
                             			NULL);
    
    		mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_DATA;
    		mii.fType = MFT_OWNERDRAW;
    		mii.wID = IDM_EDITBOX;
    		mii.dwItemData = (ULONG_PTR)MeinControl;
    		InsertMenuItem (hpopup, IDM_EDITBOX, TRUE,  &mii);
    


  • Das wird aus dem Grund nicht angezeigt, da das von der WinAPI gar nicht unterstützt wird



  • Bitte?

    Und wie mach ich das ganze dann???
    Ich möchte ja nur eine Eingabe-Box im Menü haben 😞



  • Du hattest doch vor kurzem darauf schon eine Antwort erhalten: http://www.codeproject.com/win32/mwtsui.asp?target=office|xp 🙄



  • nur ist der Code ein wenig umfangreich und nicht leicht ersichtlich wo und wie die Textbox ins Menü kommt 🙄

    Oder sagen wir es so, ich kapiers noch nicht 😞



  • Ich hab mir das gestern auch mal genauer angeschaut, aber wie genau das realisiert wird hab ich noch nicht gefunden. Wenn du aber diese DLL direkt nutzt brauchst du dir nur den Quelltext der Test-Anwendung anschauen:

    ContextMenu = MWLoadMenu(hInstance, MAKEINTRESOURCE(IDR_POPUP));
    HMWMENU sub1 = MWGetSubMenu(ContextMenu, 0);
    
    MWMENUITEMINFOW mii2;
    WCHAR t1[10] = L"This msg";
    WCHAR t2[12] = L"This title";
    
    mii2.cbSize = sizeof(mii2);
    mii2.fState = 0;
    mii2.fMask = MIIM_ID | MIIM_STRING | MIIM_STATE | MIIM_FTYPE | MIIM_TYPE | MIIM_EDIT;
    mii2.fType = MFT_STRING;
    mii2.wID = 55; 
    mii2.dwTypeData = &t1[0];
    mii2.cch = 17; 
    mii2.dwMinimumWidth = 150;
    mii2.strTitle = &t2[0];
    
    MWInsertMenuItemExW(sub1, 5, TRUE, &mii2);
    

    Wenn ich mal Lust und Zeit habe schau ich vielleicht auch mal danach, wie das in der DLL so alles abläuft 😉



  • Ein Edit in einem Menü? Das ist wohl sehr schlechtes GUI-Design.



  • Ok, dann die Design-Frage:

    Meien Anwendung liegt in der System-Tray. Von dort aus kann ich auf
    all meine Projekte zugreifen (Projekt-Box öffnen, Datenbankverbindung öffnen usw.).
    Nun soll der Benutzer schnell und einfach auf das interne Telefonbuch zugreifen könne, sprich er gibt Name, Kürzel oder die Telefonnummer ein und es soll eine Ergebnis-Liste ausgegeben werden.

    Soll ich für die Eingabe ein eigenes Fenster öffnen?
    Ich dachte mir mit einer Editbox im Menü geht das ganze wesentlich schneller?!?!

    Oder hast Du eine andere geniale Idee? Bin für jeden Vorschlag dankbar



  • Robby schrieb:

    Soll ich für die Eingabe ein eigenes Fenster öffnen?

    Ja!


Anmelden zum Antworten