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


Handle de la ventana principal en un cuadro de dialogo

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

Moderador: latindeveloper

Handle de la ventana principal en un cuadro de dialogo

Notapor rbpkirow el Jue Abr 14, 2005 9:29 am

Hola.

A ver si alguien me puede echar un cable...

Necesito saber como llamar desde un cuadro de dialogo, al handle de la ventana principal, para obtener su dimension con la funcion 'GetClientRect' o alguna parecida...

Esto lo necesito para poder colocar el cuadro de dialogo en una posicion relativa a la ventana principal.

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

Re: Handle de la ventana principal en un cuadro de dialogo

Notapor DJK el Jue Abr 14, 2005 1:05 pm

Si usas MFC te puede server este código

Código: Seleccionar todo
   // Agrega las lineas de codigo en el archivo MainFrm.cpp
   // en la función

   int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

   // CADENA PARA LAMACENAR LA DIMENCION DE LA VENTANA PRINCIPAL PUEDE OBIARSE
   static char szX[ 6 ];

   // DECLARAR COMO VARIABLE GLOBAL PARA KE INTERACTUE CON EL DIALOGO A CENTRAR
   RECT        rRect;

   // OBTENEMOS LAS DIMENCIONES DEL AREA CLIENTE DE LA VENTANA PRINCIPAL
   GetClientRect( &rRect );

   // AGREGAMOS LAS COORDENADAS DE LA VENTANA A LA CADENA
   wsprintf( szX, "Ancho: %d, Alto: %d", rRect.right, rRect.bottom );

   // MOSTRAMOS UN MSG PARA VER LAS DIMENCIONES DE LA VENTANA
   MessageBox( szX, "Mis Dimensiones", MB_OK | MB_ICONINFORMATION );


Si usas WIN32 te puede server este código

Código: Seleccionar todo
   // Agrega las lineas de codigo en la funcion WM_CREATE

   // CADENA PARA LAMACENAR LA DIMENCION DE LA VENTANA PRINCIPAL PUEDE OBIARSE
   static char szX[ 6 ];

   // DECLARAR COMO VARIABLE GLOBAL PARA KE INTERACTUE CON EL DIALOGO A CENTRAR
   HWND        hMainWnd;
   RECT        rRect;

   // donde hMainWnd, se usa para crear la venta con la funcion CreateWindowEx();
   hMainWnd = CreateWindowEx( ... );

   // OBTENEMOS LAS DIMENCIONES DEL AREA CLIENTE DE LA VENTANA PRINCIPAL
   GetClientRect( hMainWnd, &rRect );

   // AGREGAMOS LAS COORDENADAS DE LA VENTANA A LA CADENA
   wsprintf( szX, "Ancho: %d, Alto: %d", rRect.right, rRect.bottom );

   // MOSTRAMOS UN MSG PARA VER LAS DIMENCIONES DE LA VENTANA
   MessageBox( hMainWnd, szX, "Mis Dimensiones", MB_OK | MB_ICONINFORMATION );


y Bueno para centrar tu dialogo ya sabes lo ke tienes ke hacer ok.
ojala ke te pueda ayudar este comentario
claro que hay muchas otrar formas de obtener las dimenciones de la
ventana principal WM_SIZE, WM_PAINT, WM_INITDIALOG, etc...
ahora ve tu a probar y disfrutalo.

bites!!! y saludos.
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: Handle de la ventana principal en un cuadro de dialogo

Notapor latindeveloper el Jue Abr 14, 2005 1:20 pm

rbpkirow escribió:Hola.
Esto lo necesito para poder colocar el cuadro de dialogo en una posicion relativa a la ventana principal.


Para poner in dialogo en una posicion relativa a otra ventana o dialogo puedes revisar el articulo Juego de Ajedréz que esta en :

http://www.latindevelopers.com/vcpp/games/chess/

Lo que hace actualizar la posicion de un dialogo al costado de la ventana principal.

Esto esta en el evento OnMove del CMainFrame:


Código: Seleccionar todo
void CMainFrame::OnMove(int x, int y)
{
   CFrameWnd::OnMove(x, y);
   
   if(m_wndTool.m_hWnd ){
      CRect rect;
      CRect wnd;
      m_wndTool.GetWindowRect(&wnd);
      GetWindowRect(&rect);
      rect.left = rect.right;
      rect.right = rect.left + wnd.Width();
      rect.bottom = rect.top + wnd.Height();

      m_wndTool.MoveWindow(&rect);
      if(!m_wndTool.IsWindowVisible()){
         m_wndTool.ShowWindow(SW_SHOW);
      }
   }
}


m_wndTool es el dialogo pequeño.


Si lo que quieres es hacer esto pero desde el mismo dialogo entonces puedes obtener un puntero a la ventana principal mediante:

Código: Seleccionar todo
CWnd *mainWnd =  AfxGetMainWnd();
mainWnd->GetClientRect( ...);


Espero que te haya servido.
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru


Volver a Visual C++

¿Quién está conectado?

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

cron