Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


poner una barar de herramientas en vertical

Aqui programadores en la plataforma Win32 con Visual C++ de Microsoft...

Moderador: latindeveloper

poner una barar de herramientas en vertical

Notapor rbpkirow el Jue Abr 07, 2005 4:44 am

Hola de nuevo.

Alguien me podria ayudar??

Necesito poner una barra de herramientas (CToolBar) en vertical y centrada en la pantalla.

Gracias a todos por vuestra ayuda
rbpkirow
Usuario Activo
Usuario Activo
 
Mensajes: 75
Registrado: Jue Abr 07, 2005 2:52 am
Ubicación: España

Re: poner una barar de herramientas en vertical

Notapor DJK el Jue Abr 07, 2005 11:40 am

rbpkirow escribió:Hola de nuevo.

Alguien me podria ayudar??

Necesito poner una barra de herramientas (CToolBar) en vertical y centrada en la pantalla.

Gracias a todos por vuestra ayuda


Pues tienes suerte amigo, mmm el codigo nativo lo ke me gusta usando las api, y stilos del toolbar para que lo puedas hacer de forma vertical.

Usas la funcion CreateWindowEx para crear el toolbar ok.

Código: Seleccionar todo
hwndRB = CreateWindowEx( WS_EX_TOOLWINDOW,
                   REBARCLASSNAME,
                   NULL,
                   WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|
                   WS_CLIPCHILDREN|RBS_VARHEIGHT|
                   CCS_NODIVIDER,
                   0,0,0,0,
                   hwndOwner,
                   NULL,
                   g_hinst,
                   NULL
                  );

rbBand.cbSize = sizeof(REBARBANDINFO);
rbBand.fMask  = RBBIM_COLORS | RBBIM_TEXT | RBBIM_BACKGROUND | RBBIM_STYLE |
                RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE;
rbBand.fStyle = RBBS_CHILDEDGE | RBBS_FIXEDBMP;


Ahora para lograr que tu ToolBar se ponga en forma Vertical tienes que usar la estructura REBARBANDINFO pues porke tienes que activar agregar los metodos UINT cxMinChild; UINT cyMinChild; UINT cx; para que puedas hacer que el ancho sea digamos de 32 px y el algo de unos 500 px, ademas de poner el arrange en el estilo del toobar.

Definicion de la Estructura
Código: Seleccionar todo
typedef struct tagREBARBANDINFO{
    UINT             cbSize;
    UINT             fMask;
    UINT             fStyle;
    COLORREF         clrFore;
    COLORREF         clrBack;
    LPTSTR           lpText;
    UINT             cch;
    int              iImage;
    HWND             hwndChild;
    UINT             cxMinChild;
    UINT             cyMinChild;
    UINT             cx;
    HBITMAP          hbmBack;
    UINT             wID;
#if (_WIN32_IE >= 0x0400)
    UINT             cyChild; 
    UINT             cyMaxChild;
    UINT             cyIntegral;
    UINT             cxIdeal;
    LPARAM           lParam;
    UINT             cxHeader;
#endif
} REBARBANDINFO, *LPREBARBANDINFO;



las variables cxMinChild, cyMinChild, y cx proveen informacion a cerca de las dimenciones relativaspara la orientacion del control. Esto significa, para un control horizontal, cxMinChild y cx son dimenciones horizontales y cyMinChild es una dimencion vertical. Sin embargo, si el control usa el estilo CCS_VERT, cxMinChild y cx son dimenciones verticales y cyMinChild es una dimencion vertical.

ufff, si no entendiste nada pues puedes referirte a SDK de Windows, esto solo se hace utilizando API's oki.


Espero ke te sirva.
Your Kung Fu is not So Good!!!
Avatar de Usuario
DJK
Usuario Activo
Usuario Activo
 
Mensajes: 24
Registrado: Vie Jun 20, 2003 10:37 am
Ubicación: Puno - Perú

Re: poner una barar de herramientas en vertical

Notapor DJK el Jue Abr 07, 2005 8:49 pm

rbpkirow escribió:Centrarla en la pantalla.


Y casi me olvido, sobre como centrar la en la pantalla, pues solo tienes que obtener las dimensiones de tu ventana cliente GetClientRect( hWnd, &rFrame ); donde hWnd es el Handle de la Ventana Principal, y rFrame la variable de tipo RECT, en la cual se almacenaran las dimenciones de la venta, luego haces una simple resta entre el ancho de la venta menos el ancho de tu toolbar y a eso lo divides entre 2, lo mismo para el alto de la ventana menos el alto del Toolbar todo eso entre 2, para que puedas centrarla, si kieres que se centre cada vez que le cambias de tamaño a la venta pues, tienes ke obtener los valores de la ventana cliente en el mensaje WM_SIZE.

Código: Seleccionar todo
// variable ke contendra las dimenciones de la ventana
RECT  rFrame;   

// Handle de la ventana principal
HWND  hWnd;

// Funcion Principal de la ventana
LRESULT CALLBACK WndPrc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
   // Ancho de tu ToolBar
   int nTbAncho;
   // Alto de tu ToolBar
   int nTbAlto;
         
   switch( message )
   {
      case WM_CREATE:

         MoveWindow( hToolBar,
                    ( rFrame.right - nTbAncho )/2,
                  ( rFrame.bottom - nTbAlto )/2,
                  nTbAncho,
                  nTbAlto,
                  TRUE
                 );

         break;

      case WM_SIZE:
         GetClientRect( hWnd, &rFrame );         
         break;
   }
   return DefWindowProc( hWnd, message, wParam, lParam );
}
[/code]

Bites!!!
Your Kung Fu is not So Good!!!
Avatar de Usuario
DJK
Usuario Activo
Usuario Activo
 
Mensajes: 24
Registrado: Vie Jun 20, 2003 10:37 am
Ubicación: Puno - Perú

probando

Notapor rbpkirow el Vie Abr 08, 2005 3:01 am

Estoy probando el codigo que me dejaste, pero la variable hwndRB, no se que tipo es. porque me me dice que no es una funcion miembro ni de toolbar ni de rebar.

Gracias por todo.
rbpkirow
Usuario Activo
Usuario Activo
 
Mensajes: 75
Registrado: Jue Abr 07, 2005 2:52 am
Ubicación: España

Re: probando

Notapor DJK el Sab Abr 09, 2005 11:14 am

rbpkirow escribió:Estoy probando el codigo que me dejaste, pero la variable hwndRB, no se que tipo es. porque me me dice que no es una funcion miembro ni de toolbar ni de rebar.

Gracias por todo.


hWndRB, es una variable de tipo HANDLE WINDOW, para poder manipular el control.

Código: Seleccionar todo
HWND hWndRB;


Con el cual podra manipular el comportamiento y enviar mensajes a través de SendMessge(...);
Your Kung Fu is not So Good!!!
Avatar de Usuario
DJK
Usuario Activo
Usuario Activo
 
Mensajes: 24
Registrado: Vie Jun 20, 2003 10:37 am
Ubicación: Puno - Perú


Volver a Visual C++

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados