Haz que un CStatic no sea desplazable en MFC.
Tengo una clase de diálogo MFC que hereda de otra que ya tiene implementada una función de desplazamiento.
En esta clase estoy mostrando varias CStatics y me gustaría saber si sería posible “congelar” una de ellas o hacer que no sea desplazable.
Ya he intentado hacer una ventana secundaria de la primera para crear una CStatic en ella sin desplazamiento, pero no es realmente lo que estoy buscando, necesito hacerlo en el mismo diálogo.
davy.ai
Sí, es posible hacer que un CStatic no se pueda desplazar dentro de una clase de diálogo MFC que herede de otra con una implementación de desplazamiento. Se puede lograr esto sobrescribiendo los mensajes WM_VSCROLL y WM_HSCROLL del control CStatic y ignorándolos. Para hacer esto, se crea una nueva clase que herede de CStatic y se sobrescribe la función PreTranslateMessage para ignorar los mensajes de desplazamiento. Luego, se utiliza esta nueva clase en lugar de CStatic para el control estático que se desea hacer no desplazable.
Aquí hay un ejemplo de implementación de la nueva clase CStatic:
En la clase de diálogo, se crea una instancia de CUnscrollableStatic en lugar de CStatic para el control que se desea que no se pueda desplazar:
Luego, en la función OnInitDialog de la clase de diálogo, se utiliza la función SubclassDlgItem para subclasificar el control estático existente con la nueva clase CUnscrollableStatic:
Reemplace IDC_MI_STATIC con el ID del control CStatic existente que desea que no se pueda desplazar.
Con esta implementación, el control estático ya no responderá a los mensajes de desplazamiento y aparecerá como no desplazable.