Usuario: anónimo

Usuarios en línea: 1
Invitados: 1

FAQ

Mensaje

1213m
Re: winapi: poner menu en ventaja hija
M(Steven Davidson) 2018-10-29 18:35:58  H

Hola Rubén,

Creo que lo que quieres hacer es lo que yo llamo un panel, que quede dentro

de la ventana principal. Para esto, necesitas usar un cuadro de diálogo sin

modo, por lo que debes usar 'CreateDialogParam()' - y no 'DialogBoxParam()'

- para crear tal cuadro de diálogo. De esta manera, el cuadro de diálogo no

bloquea las demás ventanas y se ejecuta en paralelo con las demás ventanas,

como la principal. Como este cuadro de diálogo actúa como un control, usa

el estilo 'DS_CONTROL' cuando crees el cuadro de diálogo. Típicamente, un

panel no tiene una barra de título, por lo que puedes eliminar esos estilos

de ventana.

Si requieres una ventana dentro de otra y que sea completamente

personalizada; o sea, como una ventana principal dentro de otra ventana

principal, entonces investiga MDI: Interfaz de Múltiples Documentos.

Básicamente, hay que crear dos ventanas como si fueren principales, pero

una es la principal o "marco", y la otra es una ventana hija que se llama

la "cliente"; obviamente, puede haber más de una ventana cliente. La

preparación tiene algunas diferencias, pero al final los procedimientos de

ventana se codifican de igual manera.

Espero que todo esto te oriente.

Steven

On Sun, Oct 28, 2018 at 1:08 PM Rubén Blanco Fernández <

darkmalka@hotmail.com>  wrote:

>  Buenas otra vez,

>

>

>  Sigo trasteando con winapi y lo llevaba bastante bien hasta ahora.

>

>

>  Cada ventana hija la iba construyendo como una ventana emergente, porque

>  no tenía muy claro como hacerlo y como llevo muy poco con winapi, pues voy

>  haciendo lo que entiendo evitando lo que no doy hecho.

>

>  Los problemas a medida que son imprescindibles los voy resolviendo, pero

>  me he encontrado con esto por muchas vueltas que le doy no termino de

>  encontrar la forma.

>

>

>  Lo que quiero es poner la ventana emergente como una hija de la principal,

>  la de la foto. Voy a pegar el código omitiendo muchas cosas porque son

>  muchas lineas, espero no quitar nada importante...

>

>

>  Empece a mover las cosas de DlgProcchild1 y WindowProcedure a

>  WndProcchild1. DlgProcchild1 no debe existir y sustituyento DS_MODALFRAME

>  | WS_POPUP por WS_CHILD he conseguido ponerla en el sitio, pero no

>  funciona nada en toda la aplicación, ni siquiera puedo cerrarla.

>

>

>  Un saludo y gracias

>

>

>

>  //ventana principal

>

>  LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT msg, WPARAM wParam,

>  LPARAM lParam)

>  {

>      static DATOS Datos;

>      static HINSTANCE hInstance;

>      switch (msg)

>      {

>          case WM_CREATE:

>          //pongo los valores iniciales de la estructura datos

>          case WM_COMMAND:

>             if(LOWORD(wParam) == CM_OPENTESTER)

>                DialogBoxParam(hInstance, "DialogoPrueba", hwnd,

>  DlgProcchild1, (LPARAM)&Datos); //he probado a meter DialogBoxParam en el

>  create de WndProcchild1

>             break;

>          case WM_DESTROY:

>             PostQuitMessage(0);

>             break;

>          default:

>             return DefWindowProc(hwnd, msg, wParam, lParam);

>      }

>

>

>      return 0;

>  }

>

>  //ventana emergente

>  BOOL CALLBACK DlgProcchild1(HWND hDlg, UINT msg, WPARAM wParam, LPARAM

>  lParam)

>  {

>      static DATOS *Datos;

>

>      switch (msg)

>      {

>          case WM_INITDIALOG:

>  //Configuro el estado inicial de los elementos con valores de la

>  estructura datos

>          case WM_COMMAND:

>             switch(LOWORD(wParam))

>     {

>    //Aquí tengo todas las acciones de los elemento de la ventana emergente

>             }

>      }

>      return FALSE;

>  }

>  //ventana hija

>  LRESULT CALLBACK WndProcchild1 (HWND hwnd, UINT message, WPARAM wParam,

>  LPARAM lParam)

>  {

>      switch (message){

>          case WM_CREATE:

>

>              return 0;

>          case WM_DESTROY:

>              PostQuitMessage(0);

>              return 0;

>      }

>      return DefWindowProc(hwnd, message, wParam, lParam);

>  }

>

>  //resource.rc

>  DiagSymData DIALOG 0, 0, 250, 285

>  STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION   //WS_POPUP lo

>  he sustituido por WS_CHILD y se pone en su sitio, pero no funciona nada.

>  CAPTION "Symbol Data"

>  FONT 10, "Helv"

>  BEGIN

>  //todos los elementos del panel con los respectivos #define en la cabecera

>  END

>

_______________________________________________

Lista de correo Cconclase Cconclase@listas.conclase.net

http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net

Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ