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); } |