[C con Clase] [Bulk] Re: Cargar un Dialogo antes de entrar al menú

Juan Antonio Rubio RubioJA52 en yahoo.es
Sab Sep 13 22:17:36 CEST 2008


Steven,

   Muchas gracias por la respuesta,  me ha servido de mucho. 
Evidentemente quería que me pida el cuadro de dialogo despues de que me
haya mostrado la ventana.

   Un saludo.

Steven Davidson escribió:
> Hola Juan Antonio,
>
> Juan Antonio Rubio wrote:
>   
>> Hola a todos,
>>
>> Me encuentro con un problema que quiza sea de concepto.  Me gustaria 
>> arrancar un cuadro de dialogo inmediatamente después de haber
>> mostrado la ventana principal de la aplicación.  Lo he intentado con
>> la funcion DialogBoxParam en WM_CREATE, pero es un proceso que
>> realiza ANTES de mostrar la ventana.
>>
>> El objeto es poder introducir datos (Configuración, Contraseñas,...) 
>> inmediatamente después de arrancar el programa y antes de que pueda 
>> acceder a las opciones de menú.
>>
>>     
>
> Tendrás que decidir cuándo la ventana haya entrado en el estado de 
> "arrancado". Sospecho que quieres que la ventana en sí exista 
> visualmente. Esto implicaría que se ha enviado y procesado el mensaje 
> WM_PAINT. Sugiero forzar mostrar la ventana con 'ShowWindow()' y luego 
> invoca 'UpdateWindow()' para enviar el primer mensaje 'WM_PAINT'. Esto 
> implica que no deberías usar el estilo 'WS_VISIBLE'. Por ejemplo,
>
> hwnd = CreateWindowEx( ... );
>
> while( PeekMessage( &msg, hwnd, 0, 0, PM_REMOVE ) )
> {
>    ...
> }
>
> // No hay más mensajes => Muestra la ventana
> ShowWindow( hwnd, SW_SHOWNORMAL );
> UpdateWindow( hwnd );  // => WM_PAINT enviado directamente
>
> // Crea el cuadro de diálogo
> DialogBox( ... );
>
> // Bucle normal
> while( GetMessage(...) == TRUE )
> {
>    ...
> }
>
> Esto no es una sincronización perfecta, pero quizá te sirva. Otra 
> manera, es simplemente agregar alguna variable booleana para indicar si 
> hemos procesado el mensaje 'WM_PAINT' por primera vez o no. Una mejora 
> es crear tu propio mensaje de notificación. Por ejemplo,
>
> #define WM_CREADIALOGO WM_APP
> ...
> hwnd = CreateWindowEx( ... );  // con WS_VISIBLE
> SendMessage( hwnd, WM_CREADIALOGO, 0, 0 );
>
> // Bucle normal
> while( GetMessage(...) == TRUE )
> {
>    ...
> }
> ...
> LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg,
>                               WPARAM wParam, LPARAM lParam )
> {
>    static bool bPrimeraVez = false;
>    ...
>    case WM_PAINT:
>      if( !bPrimeraVez )  bPrimeraVez = true;
>      else
>      {
>        ...
>      }
>    break;
>
>    case WM_CREADIALOGO:
>      DialogBox( ... );
>    break;
>    ...
> }
>
>
> Espero que todo esto te ayude.
>
> Steven
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
>   






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