none
Como mover Form sin bordes con el mouse C++ RRS feed

  • Pregunta

  • En C# utilizo este fragmento de codigo el cual esta en PUBLIC PARTIAL CLASS Form1:form, pero en C++ no he encontrado nada que haga lo mismo

    //Movimiento de ventana
            [DllImport("user32.DLL", EntryPoint = "ReleaseCapture")]
            private extern static void ReleaseCapture();
            [DllImport("user32.DLL", EntryPoint = "SendMessage")]
            private extern static void SendMessage(System.IntPtr hWnd, int wMsg, int wParam, int lParam);
    
            public void mouse()
            {
                ReleaseCapture();
                SendMessage(this.Handle, 0x112, 0xf012, 0);
            }

    martes, 21 de junio de 2016 2:38

Todas las respuestas

  • ¿Por qué harías tal cosa en c#? Override del WndProc, detectas el WM_NCHITTEST y devuelves HTCAPTION cuando el test te indica un HTCLIENT.

    Lo mismo haces en C++/CLI. Exáctamente.

    Por otro lado, y dicho sea de paso,  cuando compilas con sólo la opción /clr, no necesitas ningún tipo de marshaleo para invocar a funciones del api de win32. Distinto es cuando compilas en modo safe. Entonces sí. 

    OK gracias, olvide mencionar que apenas estoy aprendiendo C++, asi que no entiendo muchas cosas como el WM_NCHITTEST, donde iria eso? debo declararlo? mientras buscare con esa pista
    martes, 21 de junio de 2016 3:02
  • int xmove=0;
    
    int ymove=0;
    
    private: System::Void MyForm_MouseMove(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
    	//Mover Formulario sin bordes
    	if (e->Button!= System::Windows::Forms::MouseButtons::Left)
    	{
    		xmove = e->X;
    		ymove = e->Y;		
    	}
    	else
    	{
    		this->Left = this->Left + (e->X - xmove);
    		this->Top = this->Top + (e->Y - ymove);
    	}
    }


    viernes, 31 de agosto de 2018 11:16