Discusión sobre el artículo "Mejorando el trabajo con Paneles: cómo añadir transparencia, cambiar el color del fondo y heredar a partir de CAppDialog/CWndClient" - página 2

 

Vladimir, gracias por los artículos, material muy útil. Puedo tener una pregunta más lamer ...

Hay un objeto de tipo CBmpButton - un botón con una imagen. Por lo tanto, la imagen del botón en sí actúa como un recurso aquí. ¿Cómo acceder a sus propiedades? ¿O es imposible?

Un ejemplo de la Documentación.

Allí jugué con el método CControlsDialog::CreateBmpButton1():

//+------------------------------------------------------------------+
//| Crear el botón "BmpButton1|
//+------------------------------------------------------------------+
bool CControlsDialog::CreateBmpButton1(void)
  {
//--- coordenadas
   int x1 = INDENT_LEFT;
   int y1 = INDENT_TOP + (EDIT_HEIGHT + CONTROLS_GAP_Y);
   int x2 = x1 + BUTTON_WIDTH;
   int y2 = y1 + BUTTON_HEIGHT;
//--- crear
   if(!m_bmpbutton1.Create(m_chart_id, m_name + "BmpButton1", m_subwin, x1, y1, x2, y2))
      return(false);
//--- establece el nombre de los archivos bmp del control CBmpButton
   string name1, name2;
   name1 = "\\Images\\euro.bmp";
   name2 = "\\Images\\dollar.bmp";
   m_bmpbutton1.BmpNames(name1, name2);
   if(!Add(m_bmpbutton1))
      return(false);
   m_chart.Redraw();
   if(ObjectFind(m_chart_id, name1) >= 0)
     {
      DebugBreak();
     }
//--- tener éxito
   return(true);
  }
//+------------------------------------------------------------------+

El objeto de la propia imagen en el panel no se encuentra usando ObjectFind(), lo cual es bastante natural. ¿Cómo encontrarlo, si es que es posible?

Gracias.

 
Denis Kirichenko:

Vladimir, gracias por los artículos, material muy útil. Puede que tenga una pregunta más lamer.....

Hay un objeto de tipo CBmpButton - un botón con una imagen. Por lo tanto, la imagen del botón en sí actúa como un recurso aquí. ¿Cómo acceder a sus propiedades? ¿O no puedo?

Ejemplo de la documentación.

Allí jugué con el método CControlsDialog::CreateBmpButton1():

El objeto de la propia imagen en el panel no se encuentra utilizando ObjectFind(), lo cual es bastante natural. ¿Cómo encontrarlo, si es posible?

Gracias.

Una imagen (dibujo) no es un objeto. Los objetos son líneas, rectángulos ... elementos gráficos.

 

Hola, Vladimir. Has añadido un ClientArea adicional a la ventana. Y luego usas el método CMyWndClient::ShiftButton para desplazar los botones. Esto no es muy conveniente, porque puede haber muchos botones en la ventana. Además, puede haber muchos elementos de UI aparte de los botones. Así que, como ves, escribir métodos para cada elemento y no olvidarse de llamarlos en los manejadores de desplazamiento es todo un reto. ¿No es más fácil desplazar el ClientArea? Entonces, todos los elementos de UI contenidos en ella se desplazarán automáticamente. Es suficiente con especificar sólo el desplazamiento de ClientArea en los manejadores.

 
Mihail Matkovskij #:

Hola, Vladimir. Has añadido un ClientArea adicional a la ventana. Y luego usas el método CMyWndClient::ShiftButton para desplazar los botones. Esto no es muy conveniente, porque puede haber muchos botones en la ventana. Además, puede haber muchos elementos de UI aparte de los botones. Así que, como ves, escribir métodos para cada elemento y no olvidarse de llamarlos en los manejadores de desplazamiento es todo un reto. ¿No es más fácil desplazar ClientArea? Entonces, todos los elementos de UI contenidos en ella se desplazarán automáticamente. Es suficiente con especificar sólo el desplazamiento de ClientArea en los manejadores.

Por favor, escriba un ejemplo. Creo que todo el mundo estará interesado en este tipo de implementación.

 
Vladimir Karputov #:

Por favor, escriba un ejemplo. Creo que todo el mundo estará interesado en una aplicación de este tipo.

Después de pensar un poco, lo resolví. Tal desplazamiento no puede ser implementado debido a la imposibilidad de ocultar parcialmente cualquier objeto del gráfico (en este caso es ClientArea y botones). En otras UIs se implementa de forma diferente. Muestran un área rectangular que cae dentro del área de desplazamiento, y todo lo demás se oculta. De ahí la confusión.

 
Perfecto
 
Gracias, Vladimir, un gran trabajo.
Cómo podríamos lograr la transparencia de la cabecera?