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!