[C con Clase] winapi: poner menu en ventaja hija

Davidson, Steven srd4121 en njit.edu
Lun Oct 29 19:35:46 CET 2018


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 en 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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20181029/8fd94354/attachment.html>


Más información sobre la lista de distribución Cconclase