winapi mfc docking

winapi - Detectando cuando ha cambiado el estado de acoplamiento de CControlBar



mfc docking (1)

Estoy usando una clase derivada de CControlBar y me gustaría detectar cuándo ha cambiado el estado de acoplamiento de CControlBar (es decir, acoplamiento de vertical a horizontal o cuando entra en modo flotante).

Por supuesto, podría manejar WM_SIZE pero parece ser un desperdicio de recursos hacer la tarea cada vez que se dispara un mensaje WM_SIZE en lugar de solo cuando el estado de acoplamiento ha cambiado.

Puede alguien señalarme hacia la dirección correcta?


Puede anular la función virtual CControlBar::OnBarStyleChange para detectar cambios en el estilo de la barra de control (valores CBRS_XXX ; busque en el archivo de encabezado <afxres.h> para obtener más información).

Para determinar si la barra de control está flotante / acoplada, verifique el estilo CBRS_FLOATING . Para verificar la orientación horizontal / vertical, use los estilos CBRS_ORIENT_HORZ y CBRS_ORIENT_VERT .

Entonces, usando CToolBar (que se deriva de CControlBar ) como ejemplo:

class CMyToolBar : public CToolBar { public: virtual void OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle); }; void CMyToolBar::OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle) { // Call base class implementation. CToolBar::OnBarStyleChange(dwOldStyle, dwNewStyle); // Use exclusive-or to detect changes in style bits. DWORD changed = dwOldStyle ^ dwNewStyle; if (changed & CBRS_FLOATING) { if (dwNewStyle & CBRS_FLOATING) { // ToolBar now floating } else { // ToolBar now docked } } if (changed & CBRS_ORIENT_ANY) { if (dwNewStyle & CBRS_ORIENT_HORZ) { // ToolBar now horizontal } else if (dwNewStyle & CBRS_ORIENT_VERT) { // ToolBar now vertical } } }

¡Espero que esto ayude!