Red de conocimiento informático - Material del sitio web - Cómo agregar información sobre herramientas a los controles ATL ActiveX

Cómo agregar información sobre herramientas a los controles ATL ActiveX

Hola~

De forma predeterminada, los controles ActiveX ATL no admiten información sobre herramientas. Algunos contenedores, como Microsoft Visual Basic, agregan información sobre herramientas como una propiedad de control extendida (texto de información sobre herramientas) del control ActiveX. Sin embargo, no todos los contenedores tienen esta funcionalidad. Si desea admitir información sobre herramientas en varios contenedores, debe agregar compatibilidad con información sobre herramientas en el propio control ATL ActiveX. Este artículo muestra cómo agregar compatibilidad con información sobre herramientas a un control ActiveX ATL.

Las siguientes son tres formas de agregar soporte de información sobre herramientas a un control ATL ActiveX.

Utilice el control de **** público de la ventana de información sobre herramientas.

Utilice la clase CToolTipCtrl de MFC.

Utilice la clase CToolTipCtrl?ATL del ejemplo ATLCON.

Uso del control público **** de la ventana de información sobre herramientas

Agregue variables en la clase de control ATL fuera del tipo cwindow.

CWindow m_wndToolTip;

Commctrl.h se incluye en el archivo Stdafx.h (incluido Afxcmn.h si la aplicación es compatible con MFC).

#include

Anule el método InplaceActive y agregue el siguiente código para crear el control de información sobre herramientas.

HRESULT InPlaceActivate(LONG iVerb, const RECT* prcPosRect=NULL)

{

HRESULT hr;

hr = CComControlBase:.InPlaceActivate(iVerb, prcPosRect);

if (m_wndToolTip.m_hWnd == NULL)

{

// Si no 't window, todavía necesitamos un HWND

if (m_bWndLess)

{

HDC hDC;

// Obtener HDC de cliente

m_spInPlaceSite->GetDC(NULL, OLEDC_NODRAW, &.HDC);

}

return hr;

}

Cree una variable m_hTheWnd de tipo HWND en la clase de control y luego cree los controladores WM_LBUTTONDOWN y WM_MOUSEMOVE para la clase de control. Envíe la información adecuada al control de información sobre herramientas.

El ejemplo de código es el siguiente:

void RelayEvent(mensaje UINT, WPARAM wParam, LPARAM lParam)

{

if ( NULL != m_wndToolTip.m_hWnd)

{

MSG msg;

msg.hwnd= m_hTheWnd;

msg.message= mensaje ;

p>

msg.wParam= wParam;

msg.hwnd= m_hTheWnd;

msg.message= msg.messagewParam= wParam;

msg.lParam= lParam;

msg.time= 0;

msg.pt.x= LOWORD (lParam); msg.pt.y= HIWORD (lParam);

msg.pt.y= HIWORD (lParam). y= HIWORD (lParam);

::SendMessage(m_ wndToolTip.m_hWnd, TTM_RELAYEVENT, 0, (LPARAM)&msg);

}

}

}

LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam,BOOL bHandled)

{

bHandled = FALSE; p>

RelayEvent(uMsg, (WPARAM)wParam,MAKELPARAM(LOWORD(lParam), HIWORD(lParam)));

Devuelve

}

LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)

{

if (m_ wndToolTip.m_hWnd)

{

p>

PUNTO pt;

uId estático;

pt.x = LOWORD(lParam);

pt.y = HIWORD (lParam);

TOOLINFO ti.

ti.cbSize = sizeof(TOOLINFO);

ti.hwnd ? > ti.uId = 1;

ti.rect.left ? = pt.x;

ti.rect.right ?ti.rect.right ? ;

ti.rect.top = pt.y;

ti.rect.bottom = pt.y+1;

m_wndToolTip.SendMessage(TTM_NEWTOOLRECT, ?0, ( LPARAM)&ti);

RelayEvent(uMsg, wParam, lParam);

}

devuelve 0;

}

Vincular el proyecto a Comctl32.lib Esta LIB se puede agregar manualmente especificando el nombre de la biblioteca (o) la configuración del vinculador en el cuadro de diálogo de configuración del proyecto.

Utilice la clase CToolTipCtrl de MFC

Agregue compatibilidad con MFC en su proyecto ATL. Para utilizar la clase CToolTipCtrl de MFC, una aplicación ATL primero debe admitir MFC. Esto no se puede lograr seleccionando el Dll ATL/COM ATL habilitado para MFC en el paso 1 del Asistente para aplicaciones de MFC. Si crea un proyecto que no admite MFC, debe agregar manualmente compatibilidad con MFC. El siguiente artículo describe cómo agregar soporte MFC a una DLL/EXE ATL:

173974 Cómo agregar soporte MFC a un proyecto ATL

Utilice CToolTipCtrl en lugar de cwindow fuera de la clase de control m_wndToolTip miembro.

Llame al método CToolTipCtrl en lugar de enviar el mensaje.

HRESULT InPlaceActivate(LONG iVerb, const RECT* prcPosRect=NULL)

{

AFX_MANAGE_STATE(AfxGetStaticModuleState());

CWnd padre; p>

HRESULT hr;

hr = CComControlBase::InPlaceActivate(iVerb, prcPosRect);

if (m_wndToolTip.m_hWnd == NULL)

{

if (m_bWndLess)

{

HDC hDC;

// Obtener HDC del cliente

m_spInPlaceSite->GetDC(NULL, OLEDC_NODRAW, &hDC);