C/Visual C - Ayuda con OCX

 
Vista:

Ayuda con OCX

Publicado por Manuel ruiz (1 intervención) el 07/01/2003 14:06:07
Hola, no se si alguien me pueda ayudar. Miren yo programo en PowerBuilder, pero necesito un control de usuario(OCX) hecho en C++/Visual C(especificamente un boton) para utilizarlo en PowerBuilder como un ole.
Lo que pasa es que en PowerBuilder no se pueden personalizar los botones(hacerlos de otro color distinto al plomo clasico). Un amigo me hizo uno pero tengo problemas cuando pierde el foco(Ya nunca mas llego a el a traves del tab).
Quisiera por favor si alguien tiene uno que me lo mande, me es de mucha importancia.
Este boton debe responder a los eventos de teclado(Enter, Space,..) y poseer una propiedad de desabilitado, caption
Les agradeceria muchisimo,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Creación de un control OCX de botón personalizado para PowerBuilder

Publicado por Alejandro (980 intervenciones) el 23/04/2025 23:34:26
Para crear un control de usuario (OCX) en C++/Visual C++ que funcione como un botón personalizado para usar en PowerBuilder, puedes seguir estos pasos. Este control debe manejar eventos de teclado, permitir la personalización de colores y tener propiedades como `Caption` y `Enabled`.

Pasos para crear un control OCX de botón en Visual C++



1. Crear un nuevo proyecto de Control ActiveX:
- Abre Visual C++ y selecciona "Nuevo proyecto".
- Elige "Control ActiveX" y dale un nombre a tu proyecto.

2. Definir las propiedades del botón:
- En el archivo declase del control (por ejemplo, `MyButton.h`), define laspropiedades que necesitas, como `Caption` y `Enabled`.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class CMyButton : public COleControl
{
// ... otras definiciones ...
 
DECLARE_OLETYPELIB(CMyButton) // Para OLE Automation
DECLARE_DISPATCH_MAP()
 
// Propiedades
CString m_caption;
BOOL m_enabled;
 
// Métodos para obtener y establecer propiedades
void SetCaption(CString caption) { m_caption = caption; Invalidate(); }
CString GetCaption() { return m_caption; }
 
void SetEnabled(BOOL enabled) { m_enabled = enabled; Invalidate(); }
BOOL GetEnabled() { return m_enabled; }
 
// ... otros métodos ...
};

3. Implementar el método de dibujo:
- En el método `OnDraw`, personaliza el botón para que tenga el color y el estilo que desees.

1
2
3
4
5
6
void CMyButton::OnDraw(CDC* pDC, const CRect& rcBounds)
{
    // Dibuja el botón con el color deseado
    pDC->FillSolidRect(rcBounds, RGB(200, 200, 255)); // Color de fondo
    pDC->DrawText(m_caption, rcBounds, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}

4. Manejar eventos de teclado:
- Implementa el manejo de eventos de teclado para que el botón responda a `Enter` y `Space`.

1
2
3
4
5
6
7
8
9
10
11
12
13
BOOL CMyButton::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message == WM_KEYDOWN)
    {
        if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_SPACE)
        {
            // Llama a la función de clic del botón
            OnButtonClick();
            return TRUE; // Indica que el mensaje fue manejado
        }
    }
    return COleControl::PreTranslateMessage(pMsg);
}

5. Manejo del foco:
- Asegúrate de que el botón pueda recibir el foco correctamente. Implementa el método `OnSetFocus` y `OnKillFocus`.

1
2
3
4
5
6
7
8
9
10
11
void CMyButton::OnSetFocus(CWnd* pOldWnd)
{
    COleControl::OnSetFocus(pOldWnd);
    // Aquí puedes agregar lógica adicional si es necesario
}
 
void CMyButton::OnKillFocus(CWnd* pNewWnd)
{
    COleControl::OnKillFocus(pNewWnd);
    // Aquí puedes agregar lógica adicional si es necesario
}

6. Compilar y registrar el control:
- Compila el proyecto y asegúrate de que el control OCX se registre correctamente en el sistema. Puedes usar `regsvr32` para registrar el OCX.

7. Usar el control en PowerBuilder:
- En PowerBuilder, puedes agregar el control OCX a tu aplicación y usarlo como un botón normal. Asegúrate de que las propiedades y eventos estén correctamente configurados.

Consideraciones finales



- Asegúrate de manejar correctamente los eventos de enfoque y de teclado para que el botón funcione como se espera en PowerBuilder.
- Puedes personalizar aún más el control según tus necesidades, como agregar más propiedades o métodos.

¡Buena suerte con tu proyecto, Manuel!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar