2010-10-04 4 views

risposta

2

penso u avere per implementare da soli

  1. il mouse verso il basso Iniziamo legato sulla trascinare il mouse + il cambiamento del cursore per ridimensionare l'icona
  2. il trascinamento del mouse, basta semplicemente ridurre la dimensione del modulo
  3. al passaggio del mouse up del mouse unbind trascinare evento

il motivo suggerisco evento dinamico vincolante in modo u può specificato che il controllo o la zona dovrebbe avere il mouse verso il basso

+0

Sì, ho implementato la ridimensionamento nello stesso modo pochi giorni fa. Ma penso che dovrei selezionare la tua risposta perché sei stato il primo a postare qui. –

0

Senza un bordo (o qualche controllo), come si fa a intendono ridimensionare? Figura quella parte, quindi provare questo codice nel modulo:

public class CustomForm : Form 
{ 
    private const int WmNcLButtonDown = 0xA1; 
    private const int HtBottomRight = 17; 

    [DllImport("user32.dll")] 
    private static extern int ReleaseCapture(); 

    [DllImport("user32.dll")] 
    private static extern int SendMessage(IntPtr hwnd, int msg, int wparam, int lparam); 

    // elsewhere 
    void ResizeForm() 
    { 
     ReleaseCapture(); 
     SendMessage(this.Handle, WmNcLButtonDown, HtBottomRight, 0); 
    } 
} 

Questo codice ridimensionare la forma, come se è stata utilizzata in basso a destra. Cerca HT_BOTTOMRIGHT e altre costanti HT_ per posizioni diverse per il ridimensionamento.

1

Non sono sicuro dell'effetto Ombra, ma dovresti essere in grado di ridimensionare un modulo posizionando un pulsante nell'angolo in basso a destra con l'icona appropriata. Quando l'utente fa clic e trascina questo pulsante, ridimensiona il modulo. Ecco qualche esempio di codice:

public partial class Form1 : Form 
{ 
    private int bottomBorder; 
    private int rightBorder; 
    private Point mouseStart; 
    private bool isResizing = false; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (isResizing) 
     { 
      var newLocation = button1.Location; 
      newLocation.Offset(
       e.X - mouseStart.X, 
       e.Y - mouseStart.Y); 
      button1.Location = newLocation; 
      this.Height = button1.Bottom + bottomBorder; 
      this.Width = button1.Right + rightBorder; 
      button1.Refresh(); 
     } 

    } 

    private void button1_MouseDown(object sender, MouseEventArgs e) 
    { 
     isResizing = true; 
     mouseStart = e.Location; 
    } 

    private void button1_MouseUp(object sender, MouseEventArgs e) 
    { 
     isResizing = false; 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     bottomBorder = this.Height - button1.Bottom; 
     rightBorder = this.Width - button1.Right; 
    } 
} 
+0

One Up per essere stato più preciso. –

0

ho usato le soluzioni di Don Kirkby e Matthew Ferreira e ha creato la mia soluzione che unisce i due. Ho aggiunto uno StatusStrip chiamato "resizeHandle", reso delle dimensioni di 20x20 pixel e ascoltato i suoi eventi.

public class CustomForm : Form 
{ 
private const int WmNcLButtonDown = 0xA1; 
private const int HtBottomRight = 17; 
private const int wmNcLButtonUp = 0xA2; 
private bool isResizing = false; 

[DllImport("user32.dll")] 
private static extern int ReleaseCapture(); 

[DllImport("user32.dll")] 
private static extern int SendMessage(IntPtr hwnd, int msg, int wparam, int lparam); 

private void resizeHandle_MouseDown(object sender, MouseEventArgs e) 
{ 
    isResizing = true; 
} 

private void resizeHandle_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (isResizing) 
    { 
     // Check if we have released the Left mouse button 
     isResizing = (e.Button == MouseButtons.Left); 
     ReleaseCapture(); 
     if (isResizing) 
     { 
      SendMessage(Handle, wmNcLButtonDown, HtBottomRight, 0); 
     } 
     else 
     { 
      // Left Mouse button was released, end resizing. 
      SendMessage(Handle, wmNcLButtonUp, HtBottomRight, 0); 
     } 
    } 
} 
Problemi correlati