Cómo cambiar el puntero del mouse (ratón) para una ventana de MFC mediante Visual C++

Seleccione idioma Seleccione idioma
Id. de artículo: 131991 - Ver los productos a los que se aplica este artículo
Nota Microsoft Visual C++ .NET (2002) admite el modelo de código administrado suministrada por Microsoft .NET Framework y el modelo de código nativo no administrado de Microsoft Windows. La información de este artículo sólo se aplica al código no administrado de Visual C++.

Nota Microsoft Visual C++ 2005 admite el modelo de código administrado que es proporcionado por .NET Framework y el modelo de código no administrado nativo de Windows.
Expandir todo | Contraer todo

En esta página

Resumen

En una aplicación basada en Windows, una ventana siempre se crea basándose en una clase de ventana. La clase de ventana identifica varias características de las ventanas basadas en él, incluidos el puntero del mouse (ratón) predeterminado (cursor). En algunos casos, una aplicación que desee cambiar el puntero asociado a determinadas ventanas que crea. Este artículo describen tres métodos un MFC aplicación puede utilizar para mostrar punteros diferentes en momentos diferentes.

Más información

Aquí hay algunas situaciones cuando es posible que desee MFC aplicación para mostrar punteros diferentes en momentos distintos:
  • Cuando el puntero predeterminado no es un objeto de interfaz de usuario buena para una aplicación determinada. Por ejemplo, un puntero en i es más conveniente que la flecha para una ventana de editor de texto en Bloc de notas. Esto podría implicar cambiar el puntero para la ejecución completa de la aplicación.
  • Cuando una aplicación realiza una operación larga como E/s de disco, un puntero de reloj de arena es más apropiado que la flecha. Al cambiar el puntero a un reloj de arena, proporcionar comentarios visuales buena al usuario. Esto podría implicar cambiar el puntero para un período de tiempo limitado.

Tres métodos

Hay tres formas de que una aplicación puede cambiar el puntero del mouse (ratón) en una ventana:
  • Reemplace la función CWnd::OnSetCursor() . Llamar a API de Windows SetCursor() función para cambiar el puntero.
  • Registrar su propia clase de ventana con el puntero del mouse deseado, reemplace la función CWnd::PreCreateWindow() y utilizar la clase de ventana recién registrados para crear la ventana.
  • Para mostrar el puntero de reloj de arena estándar, una aplicación puede llamar a la CCmdTarget::BeginWaitCursor() , que muestra el reloj de arena y llamar a CmdTarget::EndWaitCursor() para volver al puntero predeterminado. Esta combinación sólo funciona para la duración de un solo mensaje. Si se mueve el mouse (ratón) antes de realiza una llamada a EndWaitCursor , Windows envía un mensaje WM_SETCURSOR a la ventana bajo el puntero. El tratamiento predeterminado de este mensaje restablece el puntero en el tipo predeterminado, uno que registrado con la clase, de manera que es necesario reemplazar CWnd::OnSetCursor() para esa ventana y restablecer el puntero al reloj de arena.

Código para ilustrar los tres métodos

El código siguiente muestra por ejemplo de cómo cambiar el puntero del mouse (ratón) de una ventana de la clase derivada de CView mediante el uso de los tres métodos. m_ChangeCursor es una variable miembro de clase CMyView y es de tipo BOOL. Indica si debe mostrarse un tipo de puntero diferente.

Primer método

Cambiar el puntero del mouse (ratón) para el objeto CMyView reemplazando CWnd::OnSetCursor() función. Utilizar ClassWizard para establecer la función de mapa de mensajes CMyView::OnSetCursor() para Windows mensaje WM_SETCURSOR y proporcionan el cuerpo de la función como sigue:
      BOOL CMyView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
      {
            if ( m_ChangeCursor )
              {
                  ::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
                  return TRUE;
              }

            return CView::OnSetCursor(pWnd, nHitTest, message);
      }
				

Segundo método

Registrar su propia clase de ventana que contiene el puntero del mouse deseada con la AfxRegisterClass() AfxRegisterWndClass() función o. A continuación, crear la ventana de vista basada en la clase de ventana registrada. Para obtener más información en registrar clases de ventanas en MFC, vea MFC Tech Nota 1, "Registro de clase de ventana".
      BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs)
      {
          cs.lpszClass = AfxRegisterWndClass(
            CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW, // use any window styles
            AfxGetApp()->LoadStandardCursor(IDC_WAIT),
            (HBRUSH) (COLOR_WINDOW + 1));         // background brush

          return CView::PreCreateWindow(cs)
      }
				

Tercer método

Llamar a las funciones BeginWaitCursor() y EndWaitCursor() para cambiar el puntero del mouse (ratón).

Nota CWinApp::DoWaitCursor(1) y CWinApp::DoWaitCursor(-1) funcionan de forma similar a BeginWaitCursor() y EndWaitCursor() , respectivamente.
      void CMyView::PerformLengthyOperation()
      {
            BeginWaitCursor();  // or AfxGetApp()->DoWaitCursor(1)

            //...

            EndWaitCursor();    // or AfxGetApp()->DoWaitCursor(-1)
      }
				
Nota si las llamadas a BeginWaitCursor() y EndWaitCursor() no están en el mismo controlador, deberá reemplazar OnSetCursor como sigue:
      BOOL CMyView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
      {
            if (m_ChangeCursor)
              {
                  RestoreWaitCursor();
                  return TRUE;
              }

            return CView::OnSetCursor(pWnd, nHitTest, message);
      }
				
en este ejemplo, establezca m_ChangeCursor en TRUE sólo antes de llamar a BeginWaitCursor() y establézcalo en FALSE después de la llamada a EndWaitCursor() .

Propiedades

Id. de artículo: 131991 - Última revisión: martes, 21 de noviembre de 2006 - Versión: 4.1
La información de este artículo se refiere a:
  • Microsoft Foundation Class Library 4.2 sobre las siguientes plataformas
    • Microsoft Visual C++ 1.5 Professional Edition
    • Microsoft Visual C++ 1.51
    • Microsoft Visual C++ 1.52 Professional Edition
    • Microsoft Visual C++ 1.0 Professional Edition
    • Microsoft Visual C++ 2.0 Professional Edition
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise
    • Microsoft Visual C++ 5.0 Professional
    • Microsoft Visual C++ 6.0 Professional
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET 2002 Standard
    • Microsoft Visual C++ .NET 2003 Standard
    • Microsoft Visual C++ 2005 Express Edition
Palabras clave: 
kbmt kbcursor kbhowto kbuidesign kbwndw KB131991 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 131991

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com