La Web del Programador: Comunidad de Programadores
 
    Pregunta:  18202 - REALIZAR UNA BARRA DE HERRAMIENTAS EN EL DESKTOP
Autor:  Dani
Necesitaría saber o orientarme de como desarrollar una aplicación que sea un tipo de barra de herramientas acoplable al escritorio, sin vista o ventana a la que estar asociada. Para que os hagais una idea, algo muy parecido a la barra de acceso directo de Office.

  Respuesta:  Oscar Torres
Paso un ejemplo simplificado de como deberías hacer para generar ese tipo de barras. Debes tener en cuenta que no estoy revisando valores de retorno de las funciones llamadas, porque justamente es un código de ejemplo. La estructura abData es global, porque seguramente deberás usarla dentro del código que maneje los eventos de la ventana. Por cierto y como verás, para crear este tipo de barras solo necesitas utilizar una API: SHAppBarMessage

APPBARDATA abData;

int convertWndInBar()
{
abData.cbSize = sizeof(APPBARDATA);
abData.hWnd = m_hWnd; //este es el Handle de la ventana a convertir
abData.uCallbackMessage = WM_APPBARDATA_EVENT; //Este es el mensaje de usuario que se generará cuando ocurra un evento sobre la barra
SHAppBarMessage(ABM_REMOVE,&abData); //Conviene utilizarlo, sobre todo en las versiones debug.

SHAppBarMessage(ABM_NEW,&abData);
abData.uEdge = ABE_TOP;
SHAppBarMessage(ABM_QUERYPOS,&abData);

abData.rc.bottom = //darle la altura deseada

SHAppBarMessage(ABM_SETPOS,&abData)
MoveWindow(m_hWnd,abData.rc.left ,abData.rc.top ,abData.rc.right ,abData.rc.bottom ,TRUE);
SetWindowPos(m_hWnd,HWND_TOP,abData.rc.left ,abData.rc.top ,abData.rc.right ,abData.rc.bottom ,SWP_NOMOVE);
SHAppBarMessage(ABM_ACTIVATE,&abData);
}