2 Fragen zu ActiveX



  • Hallo@all,

    ich bin gerade dabei, mir ein ActiveX-Steuerelement zusammenzubauen. Dazu habe ich zwei Fragen:

    1. Wie kann ich dem Steuerelement eine Scrollbar verpassen? Eine Funktion SetScrollSizes oder ähnliches wie bei CScrollView gibts nicht 😞

    2. Wie kann ich ein Standard-Steuerelement anzeigen? Ich meine das jetzt so ähnlich wie ein EditLabel vom CTreeView-Steuerelement, da wird ja ein CEdit angezeigt. Wie kann ich das in meinem Steuerelement machen? Ich habs so probiert, hab aber nicht funktioniert:

    CEdit* pEdit = new CEdit;
        pEdit->SetWindowPos(NULL,0,0,50,15,SWP_DRAWFRAME);
        pEdit->ShowWindow(SW_SHOW);
        pEdit->RedrawWindow();
    

    Das Steuerelement war Im Test-Container einfach nicht zu sehen 😕

    Auf jeden Fall, wie immer, danke für alle Art von Antworten 😉



    1. EnableScrollBar, ShowScrollbar (CWnd -> Member -> Scrolling Functions)

    CEdit* edit = new CEdit;
    edit->Create(WS_CHILD | WS_VISIBLE,CRect(0,0,100,100),this,myID);
    // ...
    delete edit;
    


  • Danke, hat beides bestens funktioniert :).

    Ich habe jetzt die Scrollbar eingefügt, aber immer, wenn man scrollen will wird die Scrollposition wieder auf 0 zurückgesetzt. Was muss ich da noch tun? So hab ichs bisher:

    EnableScrollBar(SB_BOTH);
    ShowScrollBar(HS_VERTICAL,SW_SHOW);
    SetScrollRange(HS_VERTICAL,0,1000,TRUE);
    


  • WM_HSCROLL, WM_VSCROLL (OnHScrol,...)

    Die Position musst du manuell setzen.

    void CBTreeCtrl::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
        if(nSBCode == SB_THUMBPOSITION)
        {
            SetScrollPos(SB_HORZ,nPos,true);
        }
        else if(nSBCode == SB_THUMBTRACK)
        {
            _windowOrg.x = nPos;
            EnableScrollBarCtrl(SB_HORZ);
            RedrawWindow();
        }
    
        CWnd::OnHScroll(nSBCode, nPos, pScrollBar);
    }
    

    Die anderen SB-Codes solltest du auch noch mit abfragen



  • Danke, ich werds gleich mal ausprobieren :). Eine Frage noch zum Edit-Feld: Wie kann ich feststellen, ob dieses Feld den Focus verloren hat (dann will ich es nämlich wieder löschen) oder ob der Benutzer Enter gedrückt hat (dann auch). Bisher kommt beim Enter nur so ein Error-Sound 😞

    Ich nehme mal an, das geht irgendwie mit Callback-Funktionen oder so...

    P.S.: Was mich auch noch brennend interessieren würde: Wie ist es möglich ein eigenes Ereignis zu definieren? Also wie z.B. SBN_SELCHANGE beim ListControl oder so... Auf jeden Fall Vielen Dank für deine Geduld mit mir 😉

    [ Dieser Beitrag wurde am 12.01.2003 um 13:33 Uhr von Phobos editiert. ]



  • Hmm, hat sich mehr oder weniger erledigt. Das mit dem Enter abfangen und so kann man in PreTranslateMessage tun und die Weiterverarbeitung durch return TRUE verhindern. Und für die benutzerdefinierten Ereignisse kann man, wie ich nach einigem Probieren herausgefunden habe, einfach mit dem Klassen-Assisstent ein ActiveX-Ereignis festlegen.

    Also nochmals Danke für die schnelle Hilfe 🙂


Anmelden zum Antworten