2011-02-23 8 views

Respuesta

16

Puede simplemente crear su hilo en la función OnInitDialog. No hay ninguna razón para complicar demasiado las cosas yendo y buscando una función diferente, o dividiendo el código de inicialización en dos partes. (También no es dicha función, porque no hay un mensaje de Windows correspondiente que se envía.)

Si desea obtener su cuadro de diálogo en la pantalla antes se crea el hilo, que sólo puede mostrar manualmente usando el ShowWindow function. Por ejemplo:

ShowWindow(SW_SHOW); 
RedrawWindow(); 

También ver este mensaje por Raymond Chen: Waiting until the dialog box is displayed before doing something

+0

Encontré que también necesitaba llamar a 'CenterWindow()' porque llamar a ShowWindow daba como resultado el diálogo en la esquina superior izquierda. – Klox

+0

@klox Hmm, eso no debería ser necesario. Los cuadros de diálogo se centran automáticamente en sus ventanas de propietario. Esto ocurre en una función interna de MFC, '_AfxPostInitDialog', que se ejecuta después de' OnInitDialog'. '_AfxPostInitDialog' realmente llama a' CenterWindow' si la función 'OnInitDialog' no cambia las coordenadas del diálogo. Pero llamarlo explícitamente tampoco hará daño, así que lo que sea que funcione. Solo asegúrese de centrarlo en un lugar razonable, teniendo en cuenta los sistemas de monitores múltiples. Centrarse siempre en la pantalla principal sería una decisión incorrecta. :-) –

+0

No tengo una ventana de propietario (el diálogo es la única ventana), pero su descripción ayuda a explicar el cambio en el comportamiento que estoy viendo. – Klox

0

OnInitDialog() es la función principal invocada en la inicialización (en respuesta a WM_CREATE).

¿Por qué no puedes crear tu hilo ahí?

+0

estoy creando dos hilos dentro de la función onintidialog, pero cuando lo ejecuto, el cuadro de diálogo está llegando muy despacio. Así que estoy creando un hilo dentro del ontimer, es decir, después de 5 ms de tiempo cuando se forma el diálogo, el hilo funciona correctamente. así que estaba pensando que, en lugar de crear subprocesos en el temporizador, si hay alguna otra función que llame después de que se crea dialo, entonces puedo poner mi código allí. ¿Existe alguna función? – Suri

+1

¿No se llama 'OnInitDialog' en reacción a' WM_INITDIALOG'? –

0

He cambiado la prioridad hilo para debajo de lo normal y cuando el hilo se ejecuta por primera vez que establecer el hilo para priorato normal. Esto funciona bien Gracias por su respuesta.

Cuestiones relacionadas