Scrollbalken

Faller

Erfahrenes Mitglied
Visuel studio 6.0
mfc
Windows

Hab einen Dialog gebaut in dem ich über Steuerelmente einen Scrollbalken eingabut habe.

Nun möchte ich das dieser mittteil bei Scrollbalken sich bewgt wenn ich draufklicke
(ist ja klar für was hab ich das ding ja sonzt gebaut).

Der scrollname ist scroll_x
ich hab mit der funktion
SetScrollRange(handel,scroll_x, 0, 20, TRUE);
die entfernung angegeben.

Und über
SetScrollPos(handel, scroll_x, iScrollPos, TRUE);
gebe ich nach jedem nachricht auf die neue Position.

iscrollpos erhöhe und senke ich über andere Button.

funktionieren dut nix.
nur an der seite entsteht ein senkrechter Scrollbalken denn ich nicht haben möchte.
Höstwarscheinlich muss ich andere funktionen nutzen.

Welche Funktionen beötige ich um eine mit steuerelmenten gebaute Scrollleiste zu bedienen.

mfg Faller
 
Hallo,

so ganz verstehe ich dein Problem nicht.
Hab einen Dialog gebaut in dem ich über Steuerelmente einen Scrollbalken eingabut habe
Was für einen Scrollbalken hast du denn eingebaut? Und über welche Nachricht willst du die Scroll-Position verstellen?

Zeig mal ein bißchen Code.

Mfg

langer
 
INT_PTR CALLBACK MainDlgProc( HWND handel, UINT msg, WPARAM wParam, LPARAM lParam )
{

switch( msg )
{


case scroll_y:
switch (LOWORD(wParam))
{
case SB_LINEDOWN: iScrollPos+=1; break;
case SB_PAGEUP: iScrollPos+=1; break;
case SB_PAGEDOWN: iScrollPos+=1; break;
case SB_LINEUP: iScrollPos+=1; break;
case SB_THUMBPOSITION: break;
default : break;

}
break;
}
}

Hier möchte ich die die ergebnisse von meinem scrollbalken engegenehmen.
iScrollPos ist nur Test wenn es mal funktioniren solte kann ich dies daran sehen das iScrollPos hoch geht.

Der Scrollbalken ist ein Steuerelment "Horizontale Bildlaufleiste".

Wie spreche ich eine solche erststellte Scrollbalken an?
 
Ok der scrolbalken läst sich jetze bewegen. über extra buttons.

Wenn ich über die Steuerelmente "Horizontale Bildlaufleiste"
Die Seiten Button ansprchen möchte wie macht man sowas
also da wo ich eigentlich die scrollbalken 1 schritt nach links laufen lasse oder nach rechts.

mfg faller
 
Hallo,

du mußt (bei VC 6 glaube ich mit dem Klassenassistenten) eine Funktion für die Meldung WM_HSCROLL einfügen. In dieser Funktion kannst du dann prüfen, welche Aktion ausgeführt wurde und mit den vorhandenen Funktionen der CScrollBar-Klasse entsprechend reagieren. Siehe dazu in der MSDN CScrollBar->Member.

Mfg

langer
 
OK meine Balken kann ich jetze bewegen super thx.
Das scrollen funktioniert auch super.

Das problem ist wenn ich die scrollbalken benutze ist mein bild nicht mehr zusehen.

wie ändere ich dies.
http://home.arcor.de/faller2/gasammt.PNG

In der mitte zu sehen mein prog mit scrollleisten als test ein scrennshot.

und wenn ich die scrollleisten nutze
http://home.arcor.de/faller2/ohne.PNG
rote meine maus die beim screenschot leider nicht übertragen wird.

Mein Bild wird im Wm_Paint gemahlt und in der else Schleiffe von Peekmassage.

hier ein bischen code(vereinfacht)

switch( msg )
{


case WM_VSCROLL:
//scrollbalken bewegen verandern
break;
case WM_HSCROLL:
//scrollbalken bewegen verandern
break;


case WM_COMMAND:
switch( LOWORD(wParam) )
{

case IDCANCEL:
PostQuitMessage( IDCANCEL );
break;

}
break;



case WM_DESTROY:
break;

case WM_PAINT:
//hiermahle ich
break;
}


und hier einaml meine Nachrichten schleiffe

while(msg.message != WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
{
if( !IsDialogMessage( handel, &msg ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
if( msg.message == WM_QUIT )
{
bDone = TRUE;
DestroyWindow( handel );
}
}
else
{
//Bildmahlen
}
}
 
ok der fehler lag im Wm_Paint.
jetze wird das bild immer dargestellt und das bild flagert weil es anduernd wieder gezeichnet wird.
Wie prüffe ich ob das bild neu gezeichnet werden muss oder ob es noch nicht sein muss.

Faller
 
Hallo,

du prüfst bei jeder Message, ob es eine bestimmte Message ist und bearbeitest die dann. Messages gibt es aber 'ne Menge. Und bei jeder Message, die du nicht selber bearbeitest, wird der else-Zweig abgearbeitet, also das Bild neu gezeichnet.
Mir ist nicht ganz klar, warum du nicht die Nachricht WM_HSCROLL in einer eigenen Fun ktion bearbeitest.
Code:
void CMainFrame::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
   //Hier Parameter auswerten und Werte setzen
   //und Bild zeichnen
}

Mfg

langer
 
Nunja weil es so recht einfach und schnell geht.
Damit funktionieren meine Balken und ich wüste net warum ich es auslagern solte.

So nun zurück zu meinem Flackern.
Wenn ich das WM_Paint raus nehme dann gibt es ein Fehler beim scrollen der stellt in diesem Fall das Bild nicht dar.

Wenn ich das Wm_Paint raus nehme.
dann flackert das bild in rekordzeit durch.
Beim Scrollen sieht man dann aber ab und zu das bild.

Wie schaffe ich es das ich das bild mahle.
Wenn ich die Scrollbalken anklicke dann das bild bleibt wo ist.
Und wenn ich dann scrolle das es einbischen flackert aber man das bild noch sieht.
Das Bild sich verschiebt und dann wieder ruhig da liegt.

also so wie beim paint wenn man ein zugrösses Bild hat.

plz help my

gg
mfg Faller
 

Neue Beiträge

Zurück