About Button im SystemMenu



  • Moin 😉

    Ich habe mit dem MFC-Wizard ein dialogbasierendes Programm erstellt ohne AboutBox in SystemMenu .
    Nach einer Zeit wollte ich doch in mein Programm ein "Info über das Programm" hinzufügen. Ich schrieb so :

    BOOL CDisplayErrorsDlg::OnInitDialog()
    {
    .........
    
        CMenu* pSysMenu = GetSystemMenu(FALSE);
        CString strAboutMenu;
        strAboutMenu.LoadString(IDS_ABOUTBOX);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    
    ........
    }
    

    So, jetzt habe ich "About" in mein SystemMenu hinzugefügt, aber wie werde ich wissen, ob ich wirklich auf "About" gedrückt habe, weil bei mir zeigt ClassenWizard kein WM_SYSCOMMAND Ereigniss für mein Programm, mit dem man ja wirklich dieses Ereignis behandlen kann 😡

    Was kann man machen ?

    [ Dieser Beitrag wurde am 11.10.2002 um 11:45 Uhr von barm12 editiert. ]



  • hi

    ich peile zwar nich so ganz wo dein problem ist aber schaun wir mal.
    wenn ich das richtig verstanden habe willts du auf den button, das icon, was auch immer drücken und dann soll diese about zeug erscheinen, ja ?
    soll das ein neuer dialog sein (sprich nen fenster was erscheint) oder ne art pop-up menu ?
    wenn du ein fenster (neuer dialog defakto) willst kann ich dir weiterhelfen.
    prinzipiell läuft das immer so ab das du in den resourcen irgendwas erstellst und dann über den ´übern classwizard dem objekt sozusagen ne funktion zuweist.
    also strg+w drücken, object anklicken welches was machen soll, dann daneben auf klick und funtion hinzufügen. dann erscheint in deiner maindlg eine Class:Onblabla, von hier aus kannst du ein fenster aufrufen und den status abfragen.wenn du das genau wissen willst, meld dich nochmal dann kann ich dir auch den code dazu geben. in meinem prog hab ich mir einfach ein quitmenu fenster erstellt.
    ich hoffe ich konnte helfen, wenn ichs verpeilt habe, sorry, warn versuch 😉

    gruss pain

    [ Dieser Beitrag wurde am 11.10.2002 um 12:13 Uhr von pain_md editiert. ]



  • 😃
    du hast mich nicht ganz richtig verstanden 😉

    schau mal auf das Bild :

    [url] http://www.geocities.com/barm12/index.html [/url]

    [ Dieser Beitrag wurde am 11.10.2002 um 14:04 Uhr von barm12 editiert. ]



  • Das muss in WM_COMMAND behandelt werden. ID hast du ja.



  • Meinst du so :

    BOOL CDisplayErrorsDlg::OnCommand(WPARAM wParam, LPARAM lParam)
    {
    // TODO: Add your specialized code here and/or call the base class

    return CDialog::OnCommand(wParam, lParam);
    }

    Aber das Problem ist, dass wenn ich SystemMenu aufrufe, wird dieses Ereignis hier nicht gefangen 😡



  • gut dann haben wir uns missverstanden 😉
    ne du sorry mit den popups kenn ich mich nich aus, könnte dir nur empfehlen einen neuen dialog anzulegen, diesmal mit info und komentaren, dann weisste wo 😉

    ich weiss ja nicht wofür du den brauchst, aber ich regle sowas immer über messageboxen.wenn du einfach nur ne info anzeigen willst reicht schon der aufruf
    MessageBox (" Mein Text")
    kannste auch über mehrere zeilen machen.wie gesagt mehr kann ich da leider nich zu sagen da ich sowas nur über die resourcen machen, also einfach faules rumklicken.viel glück noch

    pain



  • 🕶

    Na endlich, ich habe die Lösung gefunden 😉

    Also, was ich gemacht habe :

    in die __Dlg.h Datei fügte ich diese Zeile hinzu (da in meinem Fall gibt es kein WM_SYSCOMMAND Ereigniss muss man halt alles vom Hand eingeben 😮 ) :

    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

    in die __Dlg.cpp suche ich den Block (in meinem Fall sieht es so aus)

    BEGIN_MESSAGE_MAP(CDisplayErrorsDlg, CDialog)
    //{{AFX_MSG_MAP(CDisplayErrorsDlg)
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_START, OnStart)
    ON_BN_CLICKED(IDC_FILENAMESEARCH, OnFilenameSearch)
    ON_BN_CLICKED(IDC_BEENDEN, OnBeenden)
    ON_LBN_DBLCLK(IDC_LIST, OnDblclkList)
    ON_CBN_SELCHANGE(IDC_COMBO_FILE_PATH, OnSelchangeComboFilePath)
    ON_LBN_DBLCLK(IDC_WARNING_LIST, OnDblclkWarningList)
    ON_LBN_SELCHANGE(IDC_WARNING_LIST, OnSelchangeWarningList)
    ON_LBN_SELCHANGE(IDC_LIST, OnSelchangeList)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()

    und füge ON_WM_SYSCOMMAND() hinzu

    und es bleibt mir nur OnSysCommand zu implementieren 🕶

    void CDisplayErrorsDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
        if ((nID & 0xFFF0) == IDM_ABOUTBOX)
        {
            CAbout dlgAbout;
            dlgAbout.DoModal();
        }
        else
        {
            CDialog::OnSysCommand(nID, lParam);
        }
    }
    

    [ Dieser Beitrag wurde am 11.10.2002 um 16:46 Uhr von barm12 editiert. ]


Anmelden zum Antworten