Toolbar vergrössern ...



  • Ich habe in einem CFrameWnd Fenster eine Toolbar mit vier Schaltflächen
    eingebaut. Folgendermasen:

    class "Name" : CFrameWnd
    CToolBar toolbar;

    Konstruktor:
    toolbar.Create(this);
    toolbar.LoadToolBar(IDR_TOOLBAR1),

    Es erscheint eine Toolbar mit 16 x 15 Pixel grossen Schaltflächen.
    Ich wollte sie vergrössern auf 50 x 50 Pixel, und mit einer Bitmap überzeichnen.
    Folgendes hat nicht geklappt:
    Im Konstruktor:

    SIZE size1, size2;
    size1.cx = 16;
    size1.cy = 15;
    size2.cx = 50;
    size2.cy = 50;

    toolbar.SetHeigh(50);
    toolbar.SetSizes(size1, size2);
    toolbar.LoadBitmap("Bitmap.bmp");

    Bitmap.bmp hat eine Grösse von 200 x 50 Pixel, dürfte also genau über
    die Toolbar passen. Wie geht es richtig ?



  • ich erstelle meine toolbars immer so das ich ein ImageList erstelle

    // imagelist und toolbar in der klasse erstellen
    CImageList ToolBarImage1;
    CToolBar m_wndToolBar1;

    //imagelist erstellen und fuellen
    ToolBarImage1.Create(16, 16, ILC_COLOR32, 1, 6);
    ToolBarImage1.Add(AfxGetApp()->LoadIcon(IDI_ICON));

    // imagelist an toolbar weisen
    m_wndToolBar1.GetToolBarCtrl().SetImageList(&ToolBarImage1);

    in der "ILC_COLOR32" erstellste du die bit tiefe, und mit den ersten parametern die groesse, schau dir einfach die imagelisten selber an

    die reihenfolge der icons in der imagelist und der toolbar muessen nur 1 zu 1 sein



  • Wie weise ich dann den Schaltflächen einen Eventhandler zu ?



  • die toolbar wird doch weiterhin per
    m_wndToolBar1.LoadToolBar(IDR_BAR1)
    erstellt
    und danach die imagelist als aussehen drueber gelegt
    man kann weiterhin eine id vergeben und dann

    ON_COMMAND(...)

    also

    in der klasse toolbar und imagelist deklarieren

    imagelist initialisieren und fuellen

    nach der toolbar erstellung {mit LoadToolbar aus der resource heraus} die imagelist zuweisen {das aussehen der toolbar in der rc ist nun unwichtig, wird ueberdeckt mit den images}

    ON_COMMAND verwenden mit den ID's der toolbar elemente

    nix problem woischt #gg



  • So einfach wie das klingt, ist es bei mir nicht. Mein CFrameWnd-Fenster
    ist nicht vom Framework generiert, sondern "selbst" erstellt.
    Muss man vielleicht bei der CFrameWnd Klasse irgend etwas einstellen ?



  • Wo muss der oben gezeigte Code hin ?
    In den Konstruktor der CFrameWnd-Klasse ?



  • eine toolbar mit 5 elementen welche icons bekommen sollen
    die toolbar ist als "IDR_BAR1" in der resource hinzugefuegt, und ein element davon hat die id "ID_DOIT"

    /*Snipp*/

    MainFrm.h

    class CMainFrame : public CFrameWnd
    {
    private: 
        /* ... */
        CToolBar m_wndToolBar1;
        CImageList ToolBarImage1;
    
        afx_msg void OnDoIt();
    
        /* ... */
    };
    

    MainFrm.cpp

    BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
        /* ... */
        ON_COMMAND(ID_DOIT, &CMainFrame::OnDoIt)
        /* ... */
    END_MESSAGE_MAP()
    
    CMainFrame::CMainFrame()
    {
        ToolBarImage1.Create(16, 16, ILC_COLOR32, 1, 6);
        ToolBarImage1.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
        ToolBarImage1.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
        ToolBarImage1.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
        ToolBarImage1.Add(AfxGetApp()->LoadIcon(IDI_ICON4));
        ToolBarImage1.Add(AfxGetApp()->LoadIcon(IDI_ICON5));
    }
    
    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
        /* ... */
        if(!m_wndToolBar1.CreateEx(this, TBSTYLE_TRANSPARENT, WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC) ||
           !m_wndToolBar1.LoadToolBar(IDR_BAR1))
        {
            TRACE0("Failed to create tool bar\n");
                return -1;
        }
        m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);
        EnableDocking(CBRS_ALIGN_ANY);
        DockControlBar(&m_wndToolBar1);
        m_wndToolBar1.GetToolBarCtrl().SetImageList(&ToolBarImage1);
        /* ... */
    }
    
    void CMainFrame::OnDoIt()
    {
        AfxMessageBox(_T("You have clicked at element one"));
    }
    

  • Mod

    Warum verwendest Du nicht LoadToolbar!

    LOadToolbar nimmt die Höhe der Bitmap und errechnet aus der Anzahl der Items die weite der Buttons...

    Wenn Du es manual machen willst wi in Deinem letzten Posting, solltest Du alles nach OnCreate packen. Und in jedem Falle -1 returnieren wenn was schief geht.
    In den Konstruktor gehört es nicht!

    Wenn Du es so machst wie in Deinem letzten Posting verzeichte ganz auf LoadToolbar!


Anmelden zum Antworten