Posición de los ToolBars al cargarse

¿Qué tal todo raguin? Espero que bien...
En un programa estoy usando 2 toolbars aparte del principal IDR_MAINFRAME, con los ID IDR_TOOLBAR1 y IDR_TOOLBAR2, para cargarlos agregué 2 variables miembros en "MainFrm.h" las cuales son:
CToolBar m_wndToolBar1;
CToolBar m_wndToolBar2;
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
//ESTE ES EL CODIGO ORIGINAL KE CARGA LA TOOLBAR PRINCIPAL
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
//ESTE ES EL CODIGO KE AGRERGÉ PARA CARGAR MIS TOOLBARS
if (!m_wndToolBar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar1.LoadToolBar(IDR_TOOLBAR1))
{
TRACE0("Failed to create toolbar1\n");
return -1; // fail to create
}
m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar1);
if (!m_wndToolBar2.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar2.LoadToolBar(IDR_TOOLBAR2))
{
TRACE0("Failed to create toolbar2\n");
return -1; // fail to create
}
m_wndToolBar2.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar2);
return 0;
}
Ahora, el detalle está en ke carga las toolbar una debajo de otra, de esta forma
M E N U P R I N C I P A L
|ToolBarPpal
|ToolBar1
|ToolBar2
Lo cual no es la idea, llevo días buscando la forma de que las cargue una al lado de la otra de la siguiente forma
M E N U P R I N C I P A L
|ToolBarPpal |ToolBar1 |ToolBar2
Lo más que he logrado hacer es cargarlas verticalmente el cada lado, cambiando el segundo parámetro que de la función CreateEx, cambiando CBRS_TOP por CBRS_LEFT o CBRS_RIGHT, kedando así
M E N U P R I N C I P A L
|ToolBarPpal
_ _
T T
O o
O l
l l
B B
A a
r r
1 2
Pero esto tampoco el lo que deseo, quisiera saber si puedes ayudarme a encontrar la forma de cargarlas una al lado de la otra para que quede así
M E N U P R I N C I P A L
|ToolBarPpal |ToolBar1 |ToolBar2
Tambien kiero aporvechar la oportunidad para preguntarte si sabes como detectar cuando la ventana de la aplicacion principal es maximizada, es una aplicacion MFC sdi con CFormView como clase base de la vista.
Me despido, y te agradezco por atenderme...
the hippiex...

1 respuesta

Respuesta
1
De nuevo thehippiex!
A tu pregunta, no toy del todo como quisiera, pero vamos tirando, espero que a ti t vaya todo bien.
Es un placer volver a recibir una pregunta tuya, uno ya llega un momento que se cansa de responder como se usan los punteros :S
Bueno, al lio.
Lo que quieres hacer es muy sencillo, pero como todo, hay que saber cual es la mejor forma.
Para tu caso en particular, en mi modesta opinión siempre claro, deberías usar la clase CReBar. Pues por ejemplo es la barra que contiene el control CEdit donde introduces la URL en Internet Explorer. Son ventanas reubicables que pueden contener cualquier control, barras de herramientas que es lo que nos interesa también.
No t preocupes porque de lo que llevas hecho no tienes que deshacer nada, unicamente escribir un poco de ´código para que tus CToolBar pasen a ser "contenidas" en este nuevo control CReBar.
Para que veas como se hace esto, create con el Visual Studio una aplicación SDI. En el paso 4, en la pregunta:
"How do u want ur toolbar 2 look?"
Selecciona Internet Explorer Rebars.
Mirate el código del marco, sobre todo la declaración de la clase y la función CMainframre::OnCreate, es muy muy fácil de entender.
Y si no, pues pregunta, que para eso estoy :PPP
Ah, joder se m olvidaba, lo de la maximizacion de la ventana. Cuando una ventana es maximizada recibe el mensaje WM_SIZE.
Sobreescribe la función OnSize (creo que del marco seria lo más adecuado, aunque no se que es lo que realmente quieres hacer). Esta función t provee 3 parámetros, el tipo de variación de la ventana (si ha sido maximizada, minimizada, restaurada...) y la altura y anchura de la ventana cliente.
Venga, creo que con esto ya tienes para rato. :)
Un abrazo.
Raguin

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas