Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Problem mit Scrollbalken

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 <
000
06.07.2004, 14:01 Uhr
~Varia
Gast


Hallo!

Ich habe ein Problem. Ich habe eine Dialogbox mit Scrollbalken erstellt, mit Hilfe von diesem Code: www.codeproject.com/miscctrl/scrollbar.asp

Ich hatte das in mein Projekt übertragen und das hat auch so weit geklappt. Jetzt habe ich das dortige Beispielbild mit meinem eigenen Code ersetzt, der eine Graphik einer Statistik darstellt.

Jetzt erscheinen die Scrollbalken nicht mehr. Ich nehme an, dass das daran liegt, dass der Computer nicht mehr erkennt, wie groß das Bild ist. Allerdings weiß ich nicht genau, wo und wie ich das eintragen muss, damit der Computer etwas damit anstellen kann. Beim Beispielbild hat es funktioniert, aber ich kann auch da nicht erkennen, woher der Computer weiß, wie groß dieses Bild ist. Kann mir jemand auf die Sprünge helfen?

Gruß
Varia
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.07.2004, 17:01 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ich komm gerade nicht auf den codeproject-server, aber ich vermute mal das du sowas meinst

mach dir einfach einen dialog auf den packst du so ein staticfeld
das teil nennst du dann IDC_STATIC_DIAGRAMM...

dann packst du noch einen button drauf und packst dann diese methode für den button rein... fertig...

C++:
void CSinusmalenDlg::OnButton1(){

    CWnd *wp;
    CDC *pDC;
    CRect Rect;
    double y,von,bis;
    int i,width,height;
    von=-1.2;
    bis=+1.2;

    wp = GetDlgItem(IDC_STATIC_DIAGRAMM);
    pDC = wp->GetDC();
    wp->GetWindowRect(&Rect);
    width=abs(Rect.TopLeft().x-Rect.BottomRight().x);
    height=abs(Rect.TopLeft().y-Rect.BottomRight().y);
    
    for(i=0;i<width;++i){
        double wert=sin(i*3.14/180);    
        if(bis>=wert && von<=wert){
            y=height-(height*(wert-von)/(bis-von));
            pDC->SetPixel(i,(int)y,RGB(255,0,0));
            
        }    
        
    }

    wp->ReleaseDC(pDC);


    
}  




so kannst du z.b. was rauszeichen, wenns kein sinus sein soll halt was anderes nehmen... die scrollbar kannst du dann, z.b. in xrichtung verwenden wenn du mehr punkte hast als raufpassen...

dann nimmst du einfach anzahl punkte-anzahl die raufpassen-1 als range bei dem scrollbar...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.07.2004, 08:57 Uhr
~Varia
Gast


Hm, mein Problem hat sich zwischenzeitlich etwas verändert.

Ich habe rausgefunden, wie ich die Größe meiner Zeichnung eingebe. Allerdings, der Scrollbalken funktioniert nur in Y-Richtung. In X-Richtung wird er zwar angezeigt, reagiert aber nicht, wenn man draufklickt und das obwohl das Bild größer ist als der Ausschnitt.

Der relevante Code ist:


C++:
void RTStat::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // its horizontal scroll bar
    int nCurPos = GetScrollPos(SB_HORZ) ;
    int nPrevPos = nCurPos;
    // decide what to do for each diffrent scroll event
    switch(nSBCode)
        {
        case SB_LEFT:    nCurPos = 0;
                               break;
        case SB_RIGHT:    nCurPos = GetScrollLimit(SB_HORZ)-1;
            break;
        case SB_LINELEFT:nCurPos = max(nCurPos - 6, 0);
                     break;
        case SB_LINERIGHT:nCurPos = min(nCurPos + 6, GetScrollLimit(SB_HORZ)-1);
            break;
        case SB_PAGELEFT:nCurPos = max(nCurPos - m_ClientSize.Width(), 0);
            break;
        case SB_PAGERIGHT:nCurPos = min(nCurPos + m_ClientSize.Width(), GetScrollLimit(SB_HORZ)-1);
            break;
        case SB_THUMBTRACK:
        case SB_THUMBPOSITION:  nCurPos = nPos ;
            break;
        }        

    SetScrollPos(SB_HORZ, nCurPos);
    ScrollWindow(nPrevPos - nCurPos, 0) ;
    CWnd::OnHScroll(nSBCode, nPos, pScrollBar);
}

void RTStat::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // its horizontal scroll bar
    int nCurPos = GetScrollPos(SB_VERT) ;
    int nPrevPos = nCurPos;
    // decide what to do for each diffrent scroll event
    switch(nSBCode)
        {
        case SB_LEFT:    nCurPos = 0;
            break;
        case SB_RIGHT:    nCurPos = GetScrollLimit(SB_VERT)-1;
            break;
        case SB_LINELEFT:nCurPos = max(nCurPos - 6, 0);
            break;
        case SB_LINERIGHT:nCurPos = min(nCurPos + 6, GetScrollLimit(SB_VERT)-1);
            break;
        case SB_PAGELEFT:nCurPos = max(nCurPos - m_ClientSize.Height(), 0);
            break;
        case SB_PAGERIGHT:nCurPos = min(nCurPos + m_ClientSize.Height(), GetScrollLimit(SB_VERT)-1);
            break;
        case SB_THUMBTRACK:
        case SB_THUMBPOSITION:  nCurPos = nPos;
            break;
        }        

    SetScrollPos(SB_VERT, nCurPos);
    ScrollWindow(0, nPrevPos - nCurPos) ;
    CWnd::OnVScroll(nSBCode, nPos, pScrollBar);
}



Ich kapier jetzt nicht ganz, warum das in die eine Richtung funktioniert und in die andere nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: