Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - hscroll automatica in una form mdi padre
Forum - C# / VB.NET - hscroll automatica in una form mdi padre

Avatar
piter123 (Normal User)
Pro


Messaggi: 144
Iscritto: 21/05/2008

Segnala al moderatore
Postato alle 20:04
Martedì, 19/12/2017
buongiorno,
in un piccolo progetto vbnet ho un mdi form padre, quando vado a creare delle form figlie al suo interno e le sposto oltre i limiti dello schermo, automaticamente la form padre si ridimensiona e genera delle scrollbar.

Muovendo queste scrollbar il corpo della form padre scorre facendomi vedere le form figlie con top e left oltre le dimensioni dello schermo.

Come intercetto il valore delle scrollbar, sia min che max che value

Grazie

Ultima modifica effettuata da piter123 il 19/12/2017 alle 20:04
PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1834
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:10
Mercoledì, 20/12/2017
Credo che non sia così facile.

Serve un pinvoke sul form padre a qualche funzione nativa che dia i valori corretti delle scrollbar

Appena ho un po' di tempo vedo se riesco s trovarti una soluzione.
Nel frattempo puoi fare un occhiata qui

http://www.pinvoke.net/

Vedi se riesci a trovare quello che fa per te.
Uhm prova a guardare in user32.dll


PM Quote
Avatar
piter123 (Normal User)
Pro


Messaggi: 144
Iscritto: 21/05/2008

Segnala al moderatore
Postato alle 17:51
Mercoledì, 20/12/2017
intanto grazie per l'interessamento, ho provato a dare un'occhiata al link postato, ma non sono riuscito a realizzare nulla, cmq nel frattempo grazie mille

PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1834
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 10:25
Giovedì, 21/12/2017
In questi periodi non ho molto tempo, si lavora tanto, cmq ho dato uno sguardo su pinvoke.
Non hai prestato abbastanza attenzione ;)


http://www.pinvoke.net/default.aspx/user32.GetScrollPos

Questo e quello che ti serve.
La chiamata api.

Normalmente la libreria user32.dll di windows fornisce un elenco dettagliato di tutte le api possibili per la manipolazione dei controlli.

Cercando su google al getscrollpos
Ho trovato questo esempio che potrebbe aiutarti dagli uno sguardo.

Codice sorgente - presumibilmente C#

  1. [DllImport("User32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  2.     public static extern int GetScrollPos(IntPtr hWnd, int nBar);
  3.     public int hpos = 0;
  4.     void MdiClient_Scroll(object sender, ScrollEventArgs e)
  5.     {
  6.         hpos += e.NewValue;
  7.         Console.WriteLine(hpos);
  8.     }
  9.     private MdiClientWrapper wrapper;
  10.     protected override void OnHandleCreated(EventArgs e)
  11.     {
  12.         // Find the MdiClient and sub-class it so we can get the Scroll event
  13.         base.OnHandleCreated(e);
  14.         if (wrapper != null) wrapper.Scroll -= MdiClient_Scroll;
  15.         var client = this.Controls.OfType<MdiClient>().First();
  16.         wrapper = new MdiClientWrapper();
  17.         wrapper.AssignHandle(client.Handle);
  18.         wrapper.Scroll += MdiClient_Scroll;
  19.     }
  20.  
  21.     private class MdiClientWrapper : NativeWindow
  22.     {
  23.         public event ScrollEventHandler Scroll;
  24.         private int oldPos;
  25.         protected override void WndProc(ref Message m)
  26.         {
  27.             if (m.Msg == 0x114)
  28.             {   // Trap WM_HSCROLL
  29.                 var type = (ScrollEventType)(m.WParam.ToInt32() & 0xffff);
  30.                 var pos = GetScrollPos(this.Handle, SBS_HORZ);//m.WParam.ToInt32() >> 16;
  31.                 Scroll(this, new ScrollEventArgs(type, oldPos, pos));
  32.                 oldPos = pos;
  33.             }
  34.             base.WndProc(ref m);
  35.         }
  36.     }



PM Quote
Avatar
piter123 (Normal User)
Pro


Messaggi: 144
Iscritto: 21/05/2008

Segnala al moderatore
Postato alle 8:20
Venerdì, 22/12/2017
grazie mille, nei prossimi giorni farò delle prove

PM Quote